鱼C论坛

 找回密码
 立即注册
查看: 1446|回复: 3

[已解决]课后作业的一个小疑问

[复制链接]
发表于 2020-2-25 18:58:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         printf("请输入一行英文句子:");
  5.         int i=0;
  6.         
  7.         while(getchar()!='\n')                        
  8.         {if(getchar()>='A' && getchar()<='Z')
  9.         
  10.                 i=i+1;        
  11.         }
  12.         printf("你总共输入了%d个大写字母!",i);
  13.         
  14.         return 0;
  15. }
复制代码

  以上代码有bug,执行结果是错的,猜测原因是在循环体中if()的条件语句中再次调用getchar(),而此时用户没有进行输入,所以程序结果是错的,但是不知道我的猜想对不对,想请教一下,谢谢~
最佳答案
2020-2-25 21:11:19
本帖最后由 major_lyu 于 2020-2-25 21:36 编辑
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         printf("请输入一行英文句子:");
  5.         int i=0;
  6.         char ch;
  7.         
  8.         //while(getchar()!='\n')                        
  9.         //{if(getchar()>='A' && getchar()<='Z')     // 每一次调用getchar() 都会读入一个字符,你这样写,相当于读取了三个字符,第一个字符在while条件与‘\n'比较;第二个和’A‘比较;第三个和’Z‘比较。正确的应该是读取一个字符做三次判断
  10.         while((ch = getchar()) !='\n') //
  11.         {
  12.                 if(ch >= 'A' && ch <= 'Z')
  13.                 {
  14.                      i=i+1;      
  15.                  }  
  16.         }
  17.         printf("你总共输入了%d个大写字母!",i);
  18.         
  19.         return 0;
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 19:22:54 | 显示全部楼层
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         printf("请输入一行英文句子:");
  5.         int i = 0;
  6.         char t;
  7.         t = getchar();
  8.         while (t!= '\n')
  9.         {
  10.                 if (t >= 'A' && t <= 'Z')
  11.                         i = i + 1;
  12.                 t = getchar();
  13.         }
  14.         printf("你总共输入了%d个大写字母!", i);

  15.         return 0;
  16. }
复制代码

改成这样子呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 19:34:53 | 显示全部楼层
getchar的意思是从键盘获得一个字符,所以你这样写的话就只会看你输入的第一个字符是否为大小写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 21:11:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 major_lyu 于 2020-2-25 21:36 编辑
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         printf("请输入一行英文句子:");
  5.         int i=0;
  6.         char ch;
  7.         
  8.         //while(getchar()!='\n')                        
  9.         //{if(getchar()>='A' && getchar()<='Z')     // 每一次调用getchar() 都会读入一个字符,你这样写,相当于读取了三个字符,第一个字符在while条件与‘\n'比较;第二个和’A‘比较;第三个和’Z‘比较。正确的应该是读取一个字符做三次判断
  10.         while((ch = getchar()) !='\n') //
  11.         {
  12.                 if(ch >= 'A' && ch <= 'Z')
  13.                 {
  14.                      i=i+1;      
  15.                  }  
  16.         }
  17.         printf("你总共输入了%d个大写字母!",i);
  18.         
  19.         return 0;
  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 22:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表