关于scanf缓冲区有关问题
关于scanf缓冲区问题char a[100] char bscanf(%s, a)scanf(%c, &b)此时输入一次字符,a获取字
关于scanf缓冲区问题
char a[100] = "";
char b;
scanf("%s", a);
scanf("%c", &b);
此时输入一次字符,a获取字符串,b会获取第一次调用scanf后残留的'\n'
char a[100] = "";
char b[100] = "";
scanf("%s", a);
scanf("%s", b);
此时获取b需要重新输入字符
疑问是:第一次读取a时,残留的'\n'没有被b获取,是直接被忽略了么?
[解决办法]
空格('\n', '\t', ' ')是字符串的分割符,会被%s忽略的。
[解决办法]直接忽略
区别在于 %c 会读取 空白字符 而 %s 不会
%d %f %x %i %o 等等都不会读取空白字符
所以 前面有没有滞留 空白字符无所谓
[解决办法]"%s"读数据的时候会跳过所有的空格,tab和回车
"%c"则会读入任何字符, 包括空格, tab和回车
顺便说一下, LS说的rewind(stdin)和fflush(stdin)一样, 是一种不可移植的写法, 被微软支持, 但不被gcc支持。
通用的写法是
char ch;
while ( (c = getchar()) != '\n' && c != EOF ) ;
[解决办法]第二个scanf的时候,除去%c,其他格式说明符都忽略前面的空白(包括空格、回车、制表等),从第一个非空白字符读取。