由于scanf一遇到空格字符(指空格、回车、Tab键或非法字符(不属于数值的字符))就会停止读取,那有没有解决办法呢?
答案是:当然有!
int main()
{
char str[20];
scanf("%[^\n]%*c",str);
printf("%s\n", str);
return 0;
}
%[^\n]表示读取到'\n'结束
%*c表示读取一个字符,并不赋给任何变量。
这里的作用是将回车给读取掉,方便下一个读取字符的操作函数(指scanf("%c")、getchar()、gets())读取。
但如果下一个读取字符的操作函数仍为sanf,就可以不使用%*c将回车读取。因为scanf会从第一个非空白字符进行读取,会自动忽略掉前面的空白字符,而遇到空白字符结束读取。但是这样缓存区里面依旧会存取大量的空白字符,是十分危险的,所以尽量遇到一个就处理掉一个。
不过处理掉缓存区的大量的空白字符还有一种方法:
fflush(stdin);//这两个函数的头文件都为stdio.h,作用是:不管缓存区里面有没有数据,都强行清理掉。