C语言中,为何我以下几个程序都无法循环?

#我的目标:输入字符,以回车结束,输出“输入A的个数”。但是我做出以下尝试,为何程序无法循环输入?

#include <stdio.h>
 
int main()
{
    char a;
    int t = 0;
    while(1)
    {
        printf("请输入:"); 
        scanf("%c", &a);
        if(a == 'A')t++;
        if(a == '\n')break;
    }
    printf("%d", t);
}

#include <stdio.h>
 
int main()
{
    char a,b;
    int t = 0;
    do
    {
        printf("请输入:"); 
        scanf("%c", &a);
        if(a == 'A')t++;
        
    }while((b=getchar())!='\n');
    printf("%d", t);
}

第一个是因为输入回车键自动结束了输入,而输入一个字符后又必须敲一次回车键【悖反了哈哈】;
第二个是因为开始的时候循环执行一次,所以可以输入一次,然后你输入了a字符变量后,不是需要回车键吗,结果又没了。
第二个可以改成EOF,也就是

#include <stdio.h>
int main()
{
    char a,b;
    int t = 0;
    do
    {
        printf("请输入:"); 
        scanf("%c", &a);
        if(a == 'A')t++;
    }while((b=getchar())!=EOF);//这里改了
    printf("%d", t);
}
 

然后输入结束,用ctrl+z来结束输入

其实第一个也可以这么改

#include <stdio.h>
int main()
{
    char a;
    int t = 0;
    while(1)
    {
        printf("请输入:"); 
        scanf("%c", &a);
        if(a == 'A')t++;
        if(a == EOF)break;
    }
    printf("%d", t);
}
 

然后ctrl+z结束输入

#include <stdio.h>
int main()
{
    char a;
    int t = 0;
    printf("请输入:"); 
    while(1)
    {
        scanf("%c", &a);
        if(a == 'A')t++;
        if(a == '\n')break;
    }
    printf("%d", t);
}

img


没问题啊

修改如下,供参考:

#include <stdio.h>
int main()
{
    char a;
    int t = 0;
    printf("请输入:");
    while(scanf("%c", &a)==1 && a != '\n')
    {
                        //scanf("%c", &a);
        if(a == 'A')t++;
                        //if(a == '\n') break;
    }
    printf("%d", t);
    return 0;
}