【无标题】C语言连续输出输入语句执行跳过的问题

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();

对我们键盘输入的回车键进行吸收,但又不回显,也不进行赋值。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值