初莫M 发表于 2023-10-1 13:58:19

为什么答案错误啊

题目是 英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:
输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

输出格式:
输出在一行中给出字符串中大写辅音字母的个数。
#include<stdio.h>
int main()
{
        char c;int i=0;
        while(c=getchar()!='\n')
        {
                switch(c)
                {
                        case'A':i++;break;
                        case'E':i++;break;
                        case'I':i++;break;
                        case'O':i++;break;
                        case'U':i++;break;
                }
        }
        printf("%d",i);
}

isdkz 发表于 2023-10-1 13:58:26

问题出在while循环中的括号没有加上,导致程序在读入字符时出现了问题。正确的代码如下:

#include<stdio.h>
int main()
{
    char c;
    int i=0;
    while((c=getchar())!='\n')
    {
      switch(c)
      {
            case 'A': i++; break;
            case 'E': i++; break;
            case 'I': i++; break;
            case 'O': i++; break;
            case 'U': i++; break;
      }
    }
    printf("%d", i);
    return 0;
}


在while循环中加上括号后,程序可以正确读入字符并统计大写辅音字母的个数。

陶远航 发表于 2023-10-1 13:58:30

答案错误的原因在于while循环中的括号位置不正确。应该将c=getchar()!='\n'改为(c=getchar())!='\n',以确保先执行getchar()函数,再将结果与'\n'比较。否则,会先将getchar()的返回结果与'\n'比较,然后将结果赋值给c,这可能导致程序无法正确读入输入。

修改后的代码如下:

#include <stdio.h>

int main() {
    char c;
    int i = 0;
    while ((c = getchar()) != '\n') {
      switch (c) {
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                break;
            default:
                if (c >= 'A' && c <= 'Z') { // 判断是否为大写字母
                  i++;
                }
      }
    }
    printf("%d", i);
    return 0;
}


在switch语句中,可以使用default关键字来匹配除了A、E、I、O、U以外的所有字符。然后再用一个if语句来判断字符是否为大写字母,如果是,将计数器加1。这样可以避免使用多个case语句来覆盖每个不是元音字母的英文字母,使代码更加简洁。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-1 13:59:10

这个问题出错的原因是由于在while循环中的条件语句写错了。具体来说,应该使用圆括号将赋值语句和比较运算符括起来,以确保先执行赋值操作并将其结果赋给c,再用c的值进行比较。

下面是对代码进行修改后的正确版本:


#include <stdio.h>

int main() {
    char c;
    int i = 0;
    while ((c = getchar()) != '\n') {
      switch (c) {
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                break;
            case 'B':
            case 'C':
            case 'D':
            case 'F':
            case 'G':
            case 'H':
            case 'J':
            case 'K':
            case 'L':
            case 'M':
            case 'N':
            case 'P':
            case 'Q':
            case 'R':
            case 'S':
            case 'T':
            case 'V':
            case 'W':
            case 'X':
            case 'Y':
            case 'Z':
                i++;
                break;
            default:
                break;
      }
    }
    printf("%d", i);
    return 0;
}


在修改后的代码中,我们采用了圆括号将赋值语句和比较运算符括起来,同时也对switch语句进行了简化,并添加了一个default分支以确保程序的健壮性。

希望这个回答能够解决你的问题。如果还有其他疑问,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 为什么答案错误啊