scanf函数怎么读取含空格字符的字符串?

由于scanf一遇到空格字符(指空格、回车、Tab键或非法字符(不属于数值的字符))就会停止读取,那有没有解决办法呢?

答案是:当然有!

int main()
{
    char str[20];
    scanf("%[^\n]%*c",str);
    printf("%s\n", str);
    return 0;
}

%[^\n]表示读取到'\n'结束
%*c表示读取一个字符,并不赋给任何变量。
这里的作用是将回车给读取掉,方便下一个读取字符的操作函数(指scanf("%c")、getchar()、gets())读取。

scanf函数怎么读取含空格字符的字符串?_第1张图片

 但如果下一个读取字符的操作函数仍为sanf,就可以不使用%*c将回车读取。因为scanf会从第一个非空白字符进行读取,会自动忽略掉前面的空白字符,而遇到空白字符结束读取。但是这样缓存区里面依旧会存取大量的空白字符,是十分危险的,所以尽量遇到一个就处理掉一个。
不过处理掉缓存区的大量的空白字符还有一种方法:
fflush(stdin);//这两个函数的头文件都为stdio.h,作用是:不管缓存区里面有没有数据,都强行清理掉。

你可能感兴趣的:(c语言,c++,开发语言)