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

C语言do..while循环嵌入if..else语句及循环不运行问题排查

问题原因

你的程序无法正常循环的核心原因是输入缓冲区残留的换行符被%c格式符错误读取:

  • 每次输入内容后按下的回车键会在输入缓冲区生成一个\n换行符
  • %d格式符读取数字时会自动跳过前置的空白字符,但%c不会跳过任何字符,会直接读取残留的换行符
  • 换行符不属于字母,会直接触发非字母错误提示,导致看起来跳过了用户输入字母的步骤,循环逻辑异常

修复方法

最简单的修复方案是给读取字母的scanf的格式符前加一个空格,空格会自动匹配并跳过所有前置空白字符(包括换行符、空格、制表符),确保能读取到用户输入的有效字母:
将原有代码中
scanf("%c", &alphabet);
修改为
scanf(" %c", &alphabet);

修正后完整代码

#include <stdio.h>
#include <ctype.h>

int main(void){

    char alphabet;
    char confirm;
    int lowercase_vowel, uppercase_vowel;
    int a =1;
    
    do{
        printf("Enter an alphabet: ");
        // 格式符前加空格跳过残留空白字符
        scanf(" %c", &alphabet);
        
        // evaluates to 1 if variable c is a lowercase vowel
        lowercase_vowel = (alphabet == 'a' || alphabet == 'e' || alphabet == 'i' || alphabet == 'o' || alphabet == 'u');

        // evaluates to 1 if variable c is a uppercase vowel
        uppercase_vowel = (alphabet == 'A' || alphabet == 'E' || alphabet == 'I' || alphabet == 'O' || alphabet == 'U');
        
        if(!isalpha(alphabet))
        {
            printf("Error! Non-alphabetic character.\n");
        }
        else if(lowercase_vowel || uppercase_vowel)
        {
            printf("%c is a vowel.\n", alphabet);
        }       
        else
        {
            printf("%c is a consonant.\n", alphabet);   
        }
        

        printf("\nif u want to proceed enter 1, if not enter 0\n");
        scanf("%d", &a);

        }while( a == 1);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:01