После частичного соответствия scanf () игнорирует остаток от ввода? - PullRequest
0 голосов
/ 16 ноября 2018

Предусматривается ли поведение scanf(), чтобы игнорировать оставшуюся часть ввода после частичного совпадения строки формата?

Исходный код:

#include <stdio.h>

int main()
{
    int a=0, b=0;
    b = scanf("abc %d def", &a);
    printf("a=%d, b=%d\n", a, b);
    return 0;
}

Вывод (кстати, я использую GCC 6):

$ ./test_scanf01
abc 123 def
a=123, b=1
$ ./test_scanf01
fff 444 zzz
a=0, b=0
$ ./test_scanf01
abc 333 rrrr
a=333, b=1

1 Ответ

0 голосов
/ 16 ноября 2018

Да, scanf читает, пока ввод соответствует формату. В случае несоответствия scanf прекращает чтение и оставляет остаток в буфере.

Например, если у вас есть

scanf("%d %d", &int_var_1, &int_var_2);

и ввод

123 abc

тогда будет прочитана только часть "123 ". Буквы "abc" (и завершающий символ новой строки) будут оставлены во входном буфере для следующей операции ввода для чтения.

...