C语言大神快来帮忙,期末考试%>_<%!!!

2024-11-30 12:26:36
推荐回答(1个)
回答1:

我也是刚学,用vc++6.0自己尝试做了一下,编译无错误可以运行成功。但是输出结果不正常。哈哈。是 .c的文件。
经过高人的指点,要在两个scanf()直接添加while(getchar()!='\n') ; 现在成功了。
你直接复制代码进.c页面那里,编译运行就可以了。

#include
main() //通过性别、饮食、运动来预测孩子未来身高
{
char sex,sports,diet; //定义3个字符型变量,分别表示性别、运动、饮食
double faheight,moheight,height; //定义两个单精度变量,父高、母高、孩高
printf("请输入孩子的性别");
scanf("%c",&sex); //从键盘输入sex的值
if(sex=='m')
{
printf("这是一个男孩,请分别输入孩子父母的身高\n");
scanf("%lf%lf",&faheight,&moheight);
height=(faheight+moheight)*0.54;
while(getchar()!='\n') ;
printf("请问喜欢运动吗,喜欢的话请按y,否则请按n.\n");
scanf("%c",&sports);
/*因为前一次输入父母身高结束后我们要输入一个回车,这个回车被留在了输入缓冲stdin中,当下面读取sports字符型数据的时候,就会将这个回车直接赋值给sports,
而不会给用户输入的机会,while(getchar()!='\n') ; 这句话的作用就是清空stdin中的内容,这样在下一次scanf时,stdin中是没有数据的,那么就不会影响下一次的输入,
因此一般在两次scanf中间都会在后面scanf前加上这行代码,消除前面输入(无论是正确还是错误的输入)带来的影响,后面都加上它*/
while(getchar()!='\n') ;
if(sports=='y')
height=height*1.02; //喜欢运动,身高会增大
printf("你拥有良好的饮食习惯吗,拥有的话按y,否则按n"); //第23行
while(getchar()!='\n') ; //加上的
scanf("%c",&diet);
if(diet=='y')
{
height=height*1.015;
}
}

else if(sex=='f')
{
printf("这是一个女孩,请分别输入孩子父母的身高\n");
scanf("%lf%lf",&faheight,&moheight);
height=(faheight*0.923+moheight)/2;
printf("请问喜欢运动吗,喜欢的话请按Y,否则请按N.\n");
while(getchar()!='\n') ; //加上的
scanf("%c",&sports);
if(sports=='Y')
{
height=height*1.02;
}
printf("你拥有良好的饮食习惯吗,拥有的话按Y,否则按N.\n");
while(getchar()!='\n') ; //加上的
scanf("%c",&diet);
if(diet=='Y')
{
height=height*1.015;
}
}
printf("预测这个孩子长大后的身高将会是:\n");
printf("%f",height);
}