You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用do-while循环实现程序多次运行?解决元音/5次输入不终止问题

问题分析与修复方案

原代码的核心问题

  • 循环条件逻辑完全错误:
    • 用&&(逻辑与)判断元音,一个字符不可能同时等于多个元音,正确逻辑应该用||(逻辑或);
    • 错误单独写了'u',在C语言中单个非零字符常量会被视为真,直接打乱条件判断;
    • c == 5是判断字符的ASCII值为5,完全不是“输入次数达到5次”的逻辑;
    • 终止条件搞反:需求是输入元音或次数达5次时终止,原条件写的是满足这些情况才继续循环,完全相悖。
  • 缺少输入计数变量:没有统计输入次数,无法判断是否触发“5次输入”的终止条件。
  • 循环内未重新获取输入:仅在循环前读取一次字符,循环体里没有读取新输入,导致程序只能执行一次。

修正后的代码

#include <stdio.h>
int main() {
    char c;
    int count = 1; // 初始化为1,因为已经读取第一个字符

    printf("Enter a character: ");
    scanf(" %c", &c); // 加空格跳过换行符,避免读取回车

    // 循环继续的条件:不是元音 且 输入次数还没到5次
    do {
        printf("You entered: %c\n", c);

        // 还没到5次的话,继续读取下一个字符
        if (count < 5) {
            printf("Enter next character: ");
            scanf(" %c", &c);
            count++;
        }

    } while (!(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' 
            || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') 
            && count < 5);

    printf("Program terminated.\n");
    return 0;
}

代码说明

  • 新增count变量统计输入次数,初始值设为1(因为第一次输入已经完成);
  • 循环条件改为:当输入的字符不是元音,并且输入次数小于5次时,继续循环;
  • 使用scanf(" %c", &c)读取字符,前面的空格会跳过输入缓冲区中的换行符,避免误读回车;
  • 每次循环中,若次数未到5次,就读取下一个字符并递增计数;
  • 当输入元音或次数达到5次时,循环终止。

内容的提问来源于stack exchange,提问作者historia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:35:37