C语言编程过程中遇到的scanf_s语句跳过执行的问题
近期我在完成程序设计与问题求解的实验过程中,遇到了一个bug,我找了一下午都没有找到问题所在。
问题如下:
#include <stdio.h>
int main()
{
float fH, mH;
char sex, diet, sport;
printf("input your sex\n");
scanf_s("%c", &sex);
printf("input your fathers height\n");
scanf_s("%f", &fH);
printf("input your mother height\n");
scanf_s("%f", &mH);
printf("do you have a good diet\n");
scanf_s("%c", &diet);
printf("do you like sport\n");
scanf_s("%c", &sport);
printf("%c %c %c", sex, diet, sport);
return 0;
}
乍一看好像没什么问题,一行输出提示输入,然后从键盘输入信息即可。但是运行的时候出现了问题。
由图可见运行到
printf("do you have a good diet");
这一条语句时还是正常的,但是接下来应该时执行键盘输入变量diet的操作。
但是程序执行却不等我们从键盘输入字符就直接运行到下一条语句
printf("do you like sport");
我在问了许多人,找出了解决方法。就是在键盘输入语句前加入一行如下代码
getchar();
完整代码如下:
#include <stdio.h>
int main()
{
float fH, mH;
char sex, diet, sport;
printf("input your sex\n");
scanf_s("%c", &sex);
getchar();
printf("input your fathers height\n");
scanf_s("%f", &fH);
getchar();
printf("input your mother height\n");
scanf_s("%f", &mH);
getchar();
printf("do you have a good diet\n");
scanf_s("%c", &diet);
getchar();
printf("do you like sport\n");
scanf_s("%c", &sport);
getchar();
printf("%c %c %c", sex, diet, sport);
return 0;
}
即可成功的执行一条输出一条输入语句。
对于导致这次的问题的原因我猜想是这样的:
我们习惯于摁回车键结束输入,告诉电脑我们的输入操作完毕。但是对于很多个输入语句来说,电脑误认为你的回车也是输入的字符。所以,当你输入玩一个字符后的回车键默认赋值给了下面的diet变量或是sport变量中。这就造成了直观上的scanf_s语句不执行的错觉,然而程序却以为你已经进行了输入。
故我们在输入语句后面加入一个
getchar();
对我们键盘输入的回车键进行吸收,但又不回显,也不进行赋值。