吃榴莲的瘦子 发表于 2020-6-28 22:18:57

while语句课后题不明白

为什么我这样写统计的大写字母数是错误的啊?
#include<stdio.h>
int main(){
        int count=0;
        printf("请输入一行英文句子:");
        while((getchar())!='\n'){
                if((getchar())<='Z'&&(getchar())>='A'){
                count=count+1;
        }
        }
        printf("大写字母个数为%d个\n",count);
        return 0;
}

liuzhengyuan 发表于 2020-6-28 22:22:26

按你的写法,循环一次就直接读入 3 个字符了(有 3 次 getchar),应该一次循环读入一次字符

解决方法:建一个字符变量 ch,来存放每次读入的字符(原码↓)

直接帮你改好了:

#include<stdio.h>
int main() {
    int count = 0;
    char ch;
    printf("请输入一行英文句子:");
    while ((ch = getchar()) != '\n') {
      if (ch <= 'Z' && ch >= 'A') {
            count = count + 1;
      }
    }
    printf("大写字母个数为%d个\n", count);
    return 0;
}

405794672 发表于 2020-6-29 08:03:14

getchar()是用一次就获取一次。你while用了一次。然后if用了两次,一次判断小于'Z',另一次判断大于'A'。这是三个不同的字符分别作用。

jhanker 发表于 2020-6-29 08:50:21

405794672 发表于 2020-6-29 08:03
getchar()是用一次就获取一次。你while用了一次。然后if用了两次,一次判断小于'Z',另一次判断大于'A'。这 ...

楼上说得对,受教了
页: [1]
查看完整版本: while语句课后题不明白