getchar()函数按回车不能运行

我按书上的习题写了一个代码,结果运行的时候按回车不能运行,我以为是我的代码写错了,就把习题的答案写了一遍,但是还是不行,我就做了一个小小的代码

#include <stdio.h>

main()
{
    int a;
    long nc;
    nc=0; 
    while((a=getchar())!=EOF)
    nc++;
    printf("%ld\n",nc);
    printf("%c\n",a);
    return 0; 
}

然后这个代码按回车依然不能运行,但是我发现我换一下输出的位置就可以运行了

#include <stdio.h>

main()
{
    int a;
    int nc;
    nc=0; 
    while((a=getchar())!=EOF){
        nc++;
        printf("%d\n",nc);
        printf("%c\n",a);
    }
    return 0; 
}

我就感觉挺神奇的吧,但我看来看去也不知道哪里出错了

#include <math.h> 
#include <stdio.h>


main()
{
    int a,n1,n2,n3;
    n1=0;
    n2=0;
    n3=0;
    while(a=getchar()!=EOF){
        if(a==' ')
        n1++;
        else if(a=='\t')
        n2++;
        else if(a=='\n')
        n3++;
    }
    printf("%d %d %d",n1,n2,n3);
    return 0;
}

这个是习题的答案,我也不知道是哪里有问题

img


这个循环是每getchar()一次,nc++自增一次,直到我们输入 ctrl + z 结束输入后, 后两句printf()才会执行到。

img


这里的循环是,每getchar()一次,后面的{
nc++;
printf("%d\n",nc);
printf("%c\n",a);
}都被执行一次,直到输入 ctrl + z 结束输入。

书上习题的答案, while(a=getchar()!=EOF) 这句里少一对括号,修改见注释,供参考:

 #include <math.h>
#include <stdio.h>
main()
{
    int a,n1,n2,n3;
    n1=0;
    n2=0;
    n3=0;
    while((a=getchar())!=EOF){ //while(a=getchar()!=EOF)
        if(a==' ')
        n1++;
        else if(a=='\t')
        n2++;
        else if(a=='\n')
        n3++;
    }
    printf("%d %d %d",n1,n2,n3);
   
    return 0;
}