看了一个关于男朋友值多少钱的小文章,把里面的数字列出来想编成小程序来算这个价钱,可遇到一个很让我想不通的问题。
#include<stdio.h>
int main()
{
int basevalue=1000;
int stature,weight,myopia,degree,timeofabandon,timeofabandoned,age;
char basketball,football,baseball,tennis,snooker,skating;
printf(“请输入你男朋友的一些基本信息\n”);
printf(“身高:”);
scanf(“%i”,&stature);
if(stature>180)
basevalue+=(stature-180)*100;
else if(stature<170)
basevalue-=(170-stature)*100;
printf(“体重:”);
scanf(“%i”,&weight);
if(weight>150)
basevalue+=(weight-150)*10;
else if(weight<110)
basevalue-=(110-weight)*10;
printf(“近视否(1/0)”);
scanf(“%i”,&myopia);
if(myopia==1)
{printf(“近视的度数:”);
scanf(“%i”,°ree);
if(degree>300) basevalue-=degree-300;
}
printf(“会打篮球吗y/n”);
scanf(“%c”,&basketball);
printf(“basketball”);
if(basketball==’y')
basevalue+=100;
printf(“你男朋友的价值是%d”,basevalue);
getchar();
getchar();
return 0;
}
见红色部分,想用y/n来选择会不会打篮球,但是当输入basketball的取值时下面的程序不执行了,直接输出了最后的男朋友价值。很纳闷,请大侠指教。
>> 本文固定链接: http://www.vcgood.com/archives/1820
>> 转载请注明: chenhaoming 2007年09月13日 于 C语言帝国 发表
这个问题一般不小心都会犯的,你看看你的程序,scanf(“%c”,&basketball);
这句本身没问题,它是读下一个字符,为什么你还没输入就就过了呢,原因是
它读入了你在输入printf(“近视否(1/0)”);
scanf(“%i”,&myopia);
时,后面那个回车,,这样它就会直接跳到最后了,你应该在 printf(“会打篮球吗y/n”);
前加ffush(stdin); 清空缓冲区,,就是把前面的回车清空了。
谢啦……以后多多指教……
不会用这个函数,直接加了还是出错,我加了个getchar(),也可以了,它们的用法一样吗?
写错了,是fflush(stdin);,,,粗心,,
getchar();应该相当于输入一个字符,用法肯定不一样啊,相当于回车给了
getchar();回车就不会到了这句scanf(“%i”,&myopia);了,
而fflush(stdin);是把回车清空。
在判断是否是近视的时候用y/n,程序又跳过了,加入fflush(stdin)也没用,为啥呢?
程序如下:
#include<stdio.h>
int main(){
int basevalue=1000;
int stature,weight,degree,timeofabandon,timeofabandoned,age;
char basketball,myopia,football,baseball,tennis,snooker,skating;
printf(“请输入你男朋友的一些基本信息\n”);
printf(“身高:”);
scanf(“%i”,&stature);
if(stature>180)
basevalue+=(stature-180)*100;
else if(stature<170)
basevalue-=(170-stature)*100;
printf(“体重:”);
scanf(“%i”,&weight);
if(weight>150)
basevalue+=(weight-150)*10;
else if(weight<110)
basevalue-=(110-weight)*10;
printf(“近视否(y/n):”);
scanf(“%i”,&myopia);
if(myopia==1)
{printf(“近视的度数:”);
scanf(“%i”,°ree);
if(degree>300) basevalue-=degree-300;
}
fflush(stdin);
printf(“回答篮球吗(y/n):”);
scanf(“%c”,&basketball);
if(basketball==’y')
basevalue+=100;
printf(“你男朋友的价值是%d”,basevalue);
getchar();
getchar();
return 0;
}
在我这里没问题
我这里运行也没问题啊,你用的什么编译器?
试试在“printf(“近视否(y/n):”); ”前插入fflush(stdin);
嗯,对的,是我粗心了,if(myopia==1),这句话没改,应该用字符来选择的。
谢谢大家的帮忙……