鱼C论坛

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

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

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

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

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

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

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

输出格式:
输出在一行中给出字符串中大写辅音字母的个数。
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         char c;int i=0;
  5.         while(c=getchar()!='\n')
  6.         {
  7.                 switch(c)
  8.                 {
  9.                         case'A':i++;break;
  10.                         case'E':i++;break;
  11.                         case'I':i++;break;
  12.                         case'O':i++;break;
  13.                         case'U':i++;break;
  14.                 }
  15.         }
  16.         printf("%d",i);
  17. }
复制代码
最佳答案
2023-10-1 13:58:26
问题出在while循环中的括号没有加上,导致程序在读入字符时出现了问题。正确的代码如下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     char c;
  5.     int i=0;
  6.     while((c=getchar())!='\n')
  7.     {
  8.         switch(c)
  9.         {
  10.             case 'A': i++; break;
  11.             case 'E': i++; break;
  12.             case 'I': i++; break;
  13.             case 'O': i++; break;
  14.             case 'U': i++; break;
  15.         }
  16.     }
  17.     printf("%d", i);
  18.     return 0;
  19. }
复制代码


在while循环中加上括号后,程序可以正确读入字符并统计大写辅音字母的个数。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-1 13:58:26 | 显示全部楼层    本楼为最佳答案   
问题出在while循环中的括号没有加上,导致程序在读入字符时出现了问题。正确的代码如下:

  1. #include<stdio.h>
  2. int main()
  3. {
  4.     char c;
  5.     int i=0;
  6.     while((c=getchar())!='\n')
  7.     {
  8.         switch(c)
  9.         {
  10.             case 'A': i++; break;
  11.             case 'E': i++; break;
  12.             case 'I': i++; break;
  13.             case 'O': i++; break;
  14.             case 'U': i++; break;
  15.         }
  16.     }
  17.     printf("%d", i);
  18.     return 0;
  19. }
复制代码


在while循环中加上括号后,程序可以正确读入字符并统计大写辅音字母的个数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

修改后的代码如下:

  1. #include <stdio.h>

  2. int main() {
  3.     char c;
  4.     int i = 0;
  5.     while ((c = getchar()) != '\n') {
  6.         switch (c) {
  7.             case 'A':
  8.             case 'E':
  9.             case 'I':
  10.             case 'O':
  11.             case 'U':
  12.                 break;
  13.             default:
  14.                 if (c >= 'A' && c <= 'Z') { // 判断是否为大写字母
  15.                     i++;
  16.                 }
  17.         }
  18.     }
  19.     printf("%d", i);
  20.     return 0;
  21. }
复制代码


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

使用道具 举报

发表于 2023-10-1 13:59:10 | 显示全部楼层
这个问题出错的原因是由于在while循环中的条件语句写错了。具体来说,应该使用圆括号将赋值语句和比较运算符括起来,以确保先执行赋值操作并将其结果赋给c,再用c的值进行比较。

下面是对代码进行修改后的正确版本:
  1. #include <stdio.h>
  2. int main() {
  3.     char c;
  4.     int i = 0;
  5.     while ((c = getchar()) != '\n') {
  6.         switch (c) {
  7.             case 'A':
  8.             case 'E':
  9.             case 'I':
  10.             case 'O':
  11.             case 'U':
  12.                 break;
  13.             case 'B':
  14.             case 'C':
  15.             case 'D':
  16.             case 'F':
  17.             case 'G':
  18.             case 'H':
  19.             case 'J':
  20.             case 'K':
  21.             case 'L':
  22.             case 'M':
  23.             case 'N':
  24.             case 'P':
  25.             case 'Q':
  26.             case 'R':
  27.             case 'S':
  28.             case 'T':
  29.             case 'V':
  30.             case 'W':
  31.             case 'X':
  32.             case 'Y':
  33.             case 'Z':
  34.                 i++;
  35.                 break;
  36.             default:
  37.                 break;
  38.         }
  39.     }
  40.     printf("%d", i);
  41.     return 0;
  42. }
复制代码

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

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

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 06:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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