调试时,调试运行到while语句无法继续

问题遇到的现象和发生背景

编译没问题,但运行时没有输出,做过调试,调试运行到while语句无法继续

问题相关代码,请勿粘贴截图

#include <stdio.h>
#include <stdlib.h>
int main()
{
char a;
a=getchar();
int i=0;
while(a!='\n');
{
if(a>='a'&&a<='z')
{
a=a-32;
printf("%c",a);
}
else
{
printf("%c",a);
}
if(a=='a'||a=='A'||a=='e'||a=='E'||a=='i'||a=='I'||a=='o'||a=='O'||a=='u'||a=='U')
{
i++;
}
}
printf("\n");
printf("%d",i);
return 0;
}

运行结果及报错内容

img

我想要达到的结果

以此题为例
TYU67812NBM/.,8812H
1

应该是因为while循环后面多了个分号,然后while循环里里面没有加getchar()多次读取字符,修改如下:



#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a;
    a=getchar();
    int i=0;
//这里原来的分号要去除,因为分号代表一个语句的结束,如果不去掉,当a不是直接输入回车,
//其他就会一直卡这这里,因为while循环一直满足条件 
    while(a!='\n') 
    {
        if(a>='a'&&a<='z')
        {
            a=a-32;
            printf("%c",a);
        }
        else
        {
            printf("%c",a);
        }
        if(a=='a'||a=='A'||a=='e'||a=='E'||a=='i'||a=='I'||a=='o'||a=='O'||a=='u'||a=='U')
        {
            i++;
        }
        //因为要读取多个字符,所以a要在循环里多次读取单个字符,直到换行符, 
        //如果只用while循环外的一个getchar就只获取了一个字符 
        a=getchar(); 
    }
    printf("\n");
    printf("%d",i);
    return 0;
}

img

//源程序逻辑上是有问题的,
//就获取了一个字符然后你让它无限的判断,
//明显就是死循环了。
//稍微修改了一下,仅供参考,谢谢!

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a;
    a=getchar();
    int i=0;
    //while(a!='\n');
    while(a!='\n')
    {
        if(a>='a'&& a<='z')
        {
            a=a-32;
            printf("%c",a);
        }
        else
        {
            printf("%c",a);
        }
        if(a=='a'||a=='A'||a=='e'||a=='E'||a=='i'||a=='I'||a=='o'||a=='O'||a=='u'||a=='U')
        {
            i++;
        }
        a=getchar();
    }
    printf("\n");
    printf("%d",i);
    return 0;
}

img

img