C语言,IO问题。 #include "stdafx.h" #include<stdio.h> void main()
#include"stdafx.h"#include<stdio.h>voidmain(){floatfaHeight,moHeight,myHeight;charsex...
#include "stdafx.h"
#include<stdio.h>
void main()
{
float faHeight,moHeight,myHeight;
char sex,sport,diet;
printf("You are F or M:\n");
scanf("%c",&sex);
printf("DO you like sport Y/N:\n");
scanf("%c",&sport);
printf("DO you diet Y/N:\n");
scanf("%c",&diet);
printf("please check in your father height:\n");
scanf("%f",&faHeight);
printf("please check in your mother height:\n");
scanf("%f",&moHeight);
if(sex=='M')
myHeight=(faHeight+moHeight)*0.54;
else
myHeight=(faHeight*0.923 + moHeight)/2;
if(sport=='Y')
myHeight=myHeight*(1+0.02);
if(diet=='Y')
myHeight=myHeight*(1+0.015);
printf("myHeight is %f \n",myHeight);
}
输出的时候,为什么直接就跳过Do you like sport Y/N的输入环节。 展开
#include<stdio.h>
void main()
{
float faHeight,moHeight,myHeight;
char sex,sport,diet;
printf("You are F or M:\n");
scanf("%c",&sex);
printf("DO you like sport Y/N:\n");
scanf("%c",&sport);
printf("DO you diet Y/N:\n");
scanf("%c",&diet);
printf("please check in your father height:\n");
scanf("%f",&faHeight);
printf("please check in your mother height:\n");
scanf("%f",&moHeight);
if(sex=='M')
myHeight=(faHeight+moHeight)*0.54;
else
myHeight=(faHeight*0.923 + moHeight)/2;
if(sport=='Y')
myHeight=myHeight*(1+0.02);
if(diet=='Y')
myHeight=myHeight*(1+0.015);
printf("myHeight is %f \n",myHeight);
}
输出的时候,为什么直接就跳过Do you like sport Y/N的输入环节。 展开
2个回答
展开全部
从键盘输入的每个字符都会送到输入缓冲流中,scanf函数从输入缓冲流中依次读数据,第一次输入的回车符也在输入缓冲流中,而scanf函数遇到空格或换行符就结束,所以第二次scanf时还是从输入缓冲流中的回车符开始读,读到即结束,然后执行下一个语句。
解决方法:
在每个scanf语句后加一句getchar();
因为getchar()函数不会忽略回车符和空格符,也就是说getchar()函数会将回车符或空格符读出,然后读下一个字符。这样下一次scanf()时就是从回车符的下一个字符开始读了。
解决方法:
在每个scanf语句后加一句getchar();
因为getchar()函数不会忽略回车符和空格符,也就是说getchar()函数会将回车符或空格符读出,然后读下一个字符。这样下一次scanf()时就是从回车符的下一个字符开始读了。
更多追问追答
追问
那也不对啊。那为什么往下执行的时候,那些语句却能进行输入的啊。比如说那个FATHER的身高,还有母亲的身高也可以输入的呀。按照你的那个说法,如果说遇到回车符就跳出本次读取,下次再进行IO流的读取,那这个在输入FATHTER身高的时候,那母亲的身高就不能再输入了吧。
追答
这个具体的我也不太会解释,建议你可以去看C primer之类的书
但加一句getchar();肯定就没事了
后面读身高的可能是因为读的数据类型不是字符的原因吧
2011-04-20
展开全部
犯堆栈溢出等的安全检查。
传统C函数,scanf()按现代观点,就属于不安全函数。。
所以MS 定义了scanf_s()函数,建议用它代替scanf
这只是个警告信息,你初学C语言,建议忽略它。
另外,站长团上有产品团购,便宜有保证
传统C函数,scanf()按现代观点,就属于不安全函数。。
所以MS 定义了scanf_s()函数,建议用它代替scanf
这只是个警告信息,你初学C语言,建议忽略它。
另外,站长团上有产品团购,便宜有保证
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询