部分匹配后,scanf()会忽略其余的输入吗?

时间:2018-11-16 00:14:02

标签: c scanf

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 :(得分:4)

是的,只要输入与格式匹配,scanf就会读取。一旦出现不匹配,scanf就会停止读取,并将其余的保留在缓冲区中。

例如,如果您有

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

输入为

123 abc

然后将仅读取"123 "部分。字母"abc"(和结尾的换行符)将留在输入缓冲区中,以供下一个输入操作读取。