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
答案 0 :(得分:4)
是的,只要输入与格式匹配,scanf
就会读取。一旦出现不匹配,scanf
就会停止读取,并将其余的保留在缓冲区中。
例如,如果您有
scanf("%d %d", &int_var_1, &int_var_2);
输入为
123 abc
然后将仅读取"123 "
部分。字母"abc"
(和结尾的换行符)将留在输入缓冲区中,以供下一个输入操作读取。