南橘喝汽水 发表于 2021-1-22 14:38:35

S1E13课后作业求助

查一段语句大写字母的作业
#include<stdio.h>
int main()
{
        int ch,count = 0;
        printf("请输入一段英文:");
        while(getchar()!= '\n')
        {
        if(getchar() >= 'A' && getchar() <= 'Z')
        {
        count = count + 1;
        }
        }
        printf("这段字符中有%d个大写字母",count);
        return 0;
}
我看老师标准答案if语句后面是把getchar()赋值给一个新变量之后引用的是新变量,直接用函数不行么???
初学者,有点蒙了{:5_96:}

风过无痕1989 发表于 2021-1-22 14:44:14

你这样写,没有问题。只是你有没有算过,你多写了多少个字符?

南橘喝汽水 发表于 2021-1-22 14:53:02

风过无痕1989 发表于 2021-1-22 14:44
你这样写,没有问题。只是你有没有算过,你多写了多少个字符?

哪里多写??

qiuyouzhi 发表于 2021-1-22 14:59:08

南橘喝汽水 发表于 2021-1-22 14:53
哪里多写??

你每一次getchar,都会接受一个字符
所以你必须把第一次getchar的结果存起来,在下面用

风过无痕1989 发表于 2021-1-22 15:05:10

南橘喝汽水 发表于 2021-1-22 14:53
哪里多写??

如果用一个变量 ch = getchar(), 那么,后面的都可以用 ch,而你每次都是用 getcahr()

南橘喝汽水 发表于 2021-1-22 15:34:52

风过无痕1989 发表于 2021-1-22 15:05
如果用一个变量 ch = getchar(), 那么,后面的都可以用 ch,而你每次都是用 getcahr()

懂了!谢谢

南橘喝汽水 发表于 2021-1-22 15:35:26

qiuyouzhi 发表于 2021-1-22 14:59
你每一次getchar,都会接受一个字符
所以你必须把第一次getchar的结果存起来,在下面用

了解!谢谢

qiuyouzhi 发表于 2021-1-22 15:37:26

南橘喝汽水 发表于 2021-1-22 15:35
了解!谢谢

如果问题已解决,请设置【最佳答案】

风过无痕1989 发表于 2021-1-22 15:38:54

南橘喝汽水 发表于 2021-1-22 14:53
哪里多写??

除此之外,还有两点是最重要的:
1、用一个变量节省运行时间,用一个函数运行的时间可想而知;
2、函数 getchar(),每次读取一个字符,读过的字符,就在键盘缓冲区消失了,下一次再调用 getchar() 读取的是另一个字符。换句话说: if(getchar() >= 'A' && getchar() <= 'Z') 这一条语句就读取了两次缓冲区,也就是说 getchar() >= 'A' 读取的是一个字符,getchar() <= 'Z' 读取的是另一个字符,这一点,你用步进调试方式可能看到
综上所述:你的程序循环一次,读取了三个字符 while 一个,if 这里两个,你的程序还能达到你的要的目的吗?

风过无痕1989 发表于 2021-1-22 15:41:42

南橘喝汽水 发表于 2021-1-22 14:53
哪里多写??

不好意思,我说话是不是有点大喘气呀?
这是因为我每天只回答十次帖子,今天,你这个帖子我完成了四个,请详解

南橘喝汽水 发表于 2021-1-22 15:42:50

风过无痕1989 发表于 2021-1-22 15:41
不好意思,我说话是不是有点大喘气呀?
这是因为我每天只回答十次帖子,今天,你这个帖子我完成了四个, ...

没事没事{:5_95:}
页: [1]
查看完整版本: S1E13课后作业求助