1. 在scanf()中的格式串前添加一个空格,可以匹配所有空白符(空格、Tab、回车键)。但一般不在格式串后添加空格,即格式化输入中后面不能加入空格,会导致要多输入一个数值。
拓展一下: 空白字符和空字符的区别
空白字符:是指在屏幕不会显示出来的字符(如空格,制表符tab,回车换行等)
空字符(注意,不叫空白字符)是指’\0’,或者是字符的编码值为0的字符。
有什么用:
- 来屏蔽回车的影响(如果不想用这个法法,用getchar()吃掉回车也是可以的)
测试代码
void main()
{
char c;
while (1) {
printf("输入Y:");
scanf(" %c", &c);
if (c != 'Y') break;
printf("----\n");
}
printf("end\n");
system("pause");
}
如果将"%c"前的空格去掉,则程序将提前终止,因为回车键的影响。
2.scanf()函数提供的“%[]”格式串可以用来进行多个字符的输入,并对结束符进行自定义。 对于%[]还可以用^+任意字符(包括 eof)来结束字符串的输入,如%[^EOF]就是直到有EOF 输入,字符串才中止。
有什么用?
- 自己控制结束符,不再受制于空格结束读取,用scanf("%[^\n]",str)函数一次输入含空格的字符串。
测试代码及其对比
#include<bits/stdc++.h>
using namespace std;
int main() {
char str[100];
//用%[]
scanf("%[^\n]",str);//直到输入回车键,读取才结束,当然不能超过str定义的大小,否则会出错。 // 此命令与gets(str)效果一样。
printf("%s\n",str);
//常用scanf
scanf("%s",str);
printf("%s\n",str);
return 0;
}
运行结果: