对于我们学习c语言,scanf函数是一项基础和十分重要的函数,但我们在使用该函数时可能会遇到些许问题,下面是一些基础问题及其解决方案
首先是scanf的基础用法
scanf 用来从键盘读数据。格式字符串里写“要读什么类型”,后面写“存到哪个变量”。
例如
int n;
float x;
char c;
scanf("%d", &n); // 读整数
scanf("%f", &x); // 读小数
scanf("%c", &c); // 读一个字符
记得加取地址符&
问题一:%c 读到了回车
int n;
char c;
scanf("%d", &n); // 输入 20,按回车
scanf("%c", &c); // 程序没等你输入,c 就变成换行了你
这是因为按的回车也是一个字符,它留在了输入里。%d 读走数字,%c 接着把回车读走了。
解决办法:在 %c 前面加一个空格。
scanf(" %c", &c); // 空格会跳过回车和空格
记住这个写法就行:读字符用 " %c",前面带空格。
这是一个十分基础但很重要的问题,需要我们了解
问题二:不检查返回值
scanf 返回成功读到了几项。读到 1 个整数返回 1;输入字母读不到,返回 0
int n;
if (scanf("%d", &n) != 1) {
printf("输入的不是数字\n");
}
记住:scanf(...) == 1 表示读成功了,我们可以用来拿它判断输入对不对。
问题三格式串末尾加 \n
scanf("%d\n", &n); // 错!程序会卡住,等下一个非空白字符
格式串里的 \n 不是“吃掉一个回车”,而是“匹配任意空白”,结果程序一直等。
记住:scanf 的格式串里不要加 \n。
总而言之
1. 普通变量前别忘 &;
2. 读字符用 " %c",前面加空格;
3. 拿返回值判断读没读成功;
4. 格式串末尾别加 \n。