鱼C论坛

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

[已解决]为什么答案错误啊

[复制链接]
发表于 2023-10-1 13:58:19 | 显示全部楼层 |阅读模式

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

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

x
题目是 英文辅音字母是除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);
}
最佳答案
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循环中加上括号后,程序可以正确读入字符并统计大写辅音字母的个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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循环中加上括号后,程序可以正确读入字符并统计大写辅音字母的个数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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语句来覆盖每个不是元音字母的英文字母,使代码更加简洁。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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分支以确保程序的健壮性。

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

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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