首页 > 用户发贴区 > 编程问题提问区 > 遇到很奇怪的错误
2007
09-13

看了一个关于男朋友值多少钱的小文章,把里面的数字列出来想编成小程序来算这个价钱,可遇到一个很让我想不通的问题。


#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”,&degree);
                    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的取值时下面的程序不执行了,直接输出了最后的男朋友价值。很纳闷,请大侠指教。



             


遇到很奇怪的错误》有 9 条评论

  1. 5iluo 说:

    这个问题一般不小心都会犯的,你看看你的程序,scanf(“%c”,&basketball);
    这句本身没问题,它是读下一个字符,为什么你还没输入就就过了呢,原因是
    它读入了你在输入printf(“近视否(1/0)”);
                             scanf(“%i”,&myopia);
    时,后面那个回车,,这样它就会直接跳到最后了,你应该在 printf(“会打篮球吗y/n”);
    前加ffush(stdin); 清空缓冲区,,就是把前面的回车清空了。

  2. chenhaoming 说:

    谢啦……以后多多指教……

  3. chenhaoming 说:

    不会用这个函数,直接加了还是出错,我加了个getchar(),也可以了,它们的用法一样吗?

  4. 5iluo 说:

    写错了,是fflush(stdin);,,,粗心,,

    getchar();应该相当于输入一个字符,用法肯定不一样啊,相当于回车给了

    getchar();回车就不会到了这句scanf(“%i”,&myopia);了,

    而fflush(stdin);是把回车清空。

  5. chenhaoming 说:

    在判断是否是近视的时候用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”,&degree);
                        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;
    }
                                  
               

  6. 5iluo 说:

    在我这里没问题

  7. alucardyq 说:

    我这里运行也没问题啊,你用的什么编译器?

  8. alucardyq 说:

    试试在“printf(“近视否(y/n):”);       ”前插入fflush(stdin);

  9. chenhaoming 说:

    嗯,对的,是我粗心了,if(myopia==1),这句话没改,应该用字符来选择的。

    谢谢大家的帮忙……

留下一个回复