liyifeng295641 发表于 2023-12-28 20:00:49

C语言break语句和continue语句01

本帖最后由 liyifeng295641 于 2024-1-3 16:03 编辑

题目如下:
0. 写一个程序,统计用户输入的字符串中,各个元音字母出现的次数(包含大小写的 a、e、i、o、u)。

https://xxx.ilovefishc.com/forum/201603/08/045950mc8ivx4887fl6z7l.png

我写的:
#include <stdio.h>

int main(){

        char ch;
        int a, e, i, o, u, sum = 0;

        printf("请输入一个英语句子:");

        ch = getchar();
        do{
                if(ch == 'a' && ch == 'A'){
                        a++;
                        sum += a;
                        continue;
                }else if(ch == 'e' && ch == 'E'){
                        e++;
                        sum += e;
                        continue;
                }else if(ch == 'i' && ch == 'I'){
                        i++;
                        sum += i;
                        continue;
                }else if(ch == 'o' && ch == 'O'){
                        o++;
                        sum += o;
                        continue;
                }else if(ch == 'u' && ch == 'U'){
                        u++;
                        sum += u;
                        continue;
                }
        }while(ch != '\n');
        printf("您输入的句子中,包含元音字母%d个!\n", sum);
        printf("其中:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u );
       
        return 0;
}

问题,开始我用while循环来写,然后可以运行,可以sum没有累加,a,e,i,o,u。都没累加。@FishC

FishC 发表于 2023-12-28 20:01:13

你好!你的代码有一些问题。首先,在使用变量之前,需要对其进行初始化,否则它们的初始值是不确定的。在这种情况下,变量a、e、i、o、u都应该初始化为0。

其次,你的条件判断有问题。在if语句中,你使用了逻辑与运算符(&&),这意味着只有当ch既等于'a'又等于'A'时,条件才成立。但实际上,你只需要其中一个条件成立就可以。因此,应该使用逻辑或运算符(||):

if(ch == 'a' || ch == 'A'){
    a++;
    sum++;
    continue;
} else if(ch == 'e' || ch == 'E'){
    e++;
    sum++;
    continue;
} else if(ch == 'i' || ch == 'I'){
    i++;
    sum++;
    continue;
} else if(ch == 'o' || ch == 'O'){
    o++;
    sum++;
    continue;
} else if(ch == 'u' || ch == 'U'){
    u++;
    sum++;
    continue;
}

最后,你的do-while循环没有更新ch的值,导致循环进入无限循环。你需要在循环内部添加`ch = getchar();`来获取下一个字符。

修复上述问题后,你的代码应该像这样:

#include

int main(){
    char ch;
    int a=0, e=0, i=0, o=0, u=0, sum = 0;

    printf("请输入一个英语句子:");

    ch = getchar();
    do{
      if(ch == 'a' || ch == 'A'){
            a++;
            sum++;
      } else if(ch == 'e' || ch == 'E'){
            e++;
            sum++;
      } else if(ch == 'i' || ch == 'I'){
            i++;
            sum++;
      } else if(ch == 'o' || ch == 'O'){
            o++;
            sum++;
      } else if(ch == 'u' || ch == 'U'){
            u++;
            sum++;
      }
      ch = getchar(); // 获取下一个字符
    }while(ch != '\n');
   
    printf("您输入的句子中,包含元音字母%d个!\n", sum);
    printf("其中:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u );

    return 0;
}

希望对你有帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

liyifeng295641 发表于 2023-12-28 20:04:25

FishC 发表于 2023-12-28 20:01
你好!你的代码有一些问题。首先,在使用变量之前,需要对其进行初始化,否则它们的初始值是不确定的。在这 ...

请输入一个英语句子:I love you!
您输入的句子中,包含元音字母0个!
其中:a(0),e(0),i(0),o(0),u(0)%
运行的还是有问题的!

FishC 发表于 2023-12-28 20:04:42

liyifeng295641 发表于 2023-12-28 20:04
请输入一个英语句子:I love you!
您输入的句子中, ...

抱歉,我之前的回答有误。你的代码逻辑仍然存在问题。

问题出在`if`语句的条件判断上。你使用了逻辑与运算符(&&),这意味着只有当ch既等于'a'又等于'A'时,条件才成立。但实际上,你只需要其中一个条件成立就可以。

另外,你要注意到字符的大小写是有区分的,而你的代码中没有考虑到这一点。

修复上述问题后,你的代码应该像这样:

#include <stdio.h>

int main() {
    char ch;
    int a=0, e=0, i=0, o=0, u=0, sum = 0;
   
    printf("请输入一个英语句子:");
    while ((ch = getchar()) != '\n') {
      if (ch == 'a' || ch == 'A') {
            a++;
            sum++;
      } else if (ch == 'e' || ch == 'E') {
            e++;
            sum++;
      } else if (ch == 'i' || ch == 'I') {
            i++;
            sum++;
      } else if (ch == 'o' || ch == 'O') {
            o++;
            sum++;
      } else if (ch == 'u' || ch == 'U') {
            u++;
            sum++;
      }
    }
   
    printf("您输入的句子中,包含元音字母%d个!\n", sum);
    printf("其中:a(%d),e(%d),i(%d),o(%d),u(%d)", a, e, i, o, u );
   
    return 0;
}

这段修复后的代码可以正确统计输入字符串中元音字母出现的次数(包含大小写)。希望能够帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: C语言break语句和continue语句01