鱼C论坛

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

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

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

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

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

x
#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(),而此时用户没有进行输入,所以程序结果是错的,但是不知道我的猜想对不对,想请教一下,谢谢~
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
改成这样子呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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