爱学习的LYH 发表于 2020-2-25 18:58:01

课后作业的一个小疑问

#include <stdio.h>

int main()
{
      printf("请输入一行英文句子:");
      int i=0;
      
      while(getchar()!='\n')                        
      {if(getchar()>='A' && getchar()<='Z')
      
                i=i+1;      
      }
      printf("你总共输入了%d个大写字母!",i);
      
      return 0;
}
以上代码有bug,执行结果是错的,猜测原因是在循环体中if()的条件语句中再次调用getchar(),而此时用户没有进行输入,所以程序结果是错的,但是不知道我的猜想对不对,想请教一下,谢谢~

4goodworld 发表于 2020-2-25 19:22:54

#include <stdio.h>

int main()
{
        printf("请输入一行英文句子:");
        int i = 0;
        char t;
        t = getchar();
        while (t!= '\n')
        {
                if (t >= 'A' && t <= 'Z')
                        i = i + 1;
                t = getchar();
        }
        printf("你总共输入了%d个大写字母!", i);

        return 0;
}
改成这样子呢?

jjjoe 发表于 2020-2-25 19:34:53

getchar的意思是从键盘获得一个字符,所以你这样写的话就只会看你输入的第一个字符是否为大小写

major_lyu 发表于 2020-2-25 21:11:19

本帖最后由 major_lyu 于 2020-2-25 21:36 编辑

#include <stdio.h>

int main()
{
      printf("请输入一行英文句子:");
      int i=0;
        char ch;
      
      //while(getchar()!='\n')                        
      //{if(getchar()>='A' && getchar()<='Z')   // 每一次调用getchar() 都会读入一个字符,你这样写,相当于读取了三个字符,第一个字符在while条件与‘\n'比较;第二个和’A‘比较;第三个和’Z‘比较。正确的应该是读取一个字符做三次判断
      while((ch = getchar()) !='\n') //
      {
                if(ch >= 'A' && ch <= 'Z')
                {
                     i=i+1;      
               }
      }
      printf("你总共输入了%d个大写字母!",i);
      
      return 0;
}
页: [1]
查看完整版本: 课后作业的一个小疑问