HWitty 发表于 2020-11-17 10:47:29

如何理解这个程序

#include<stdio.h>

void main()
{
        int c ,nb, nt ,nl;
        nb=nt=nl=0;
        while((c=getchar())!=EOF)
        {
                if(c==' ')
                {
                        ++nb;
                }
                if(c=='\t')
                {
                        ++nt;
                }
                if(c=='\n')
                {
                        ++nl;
                }
        }
        printf("%d, %d, %d\n", nb, nt, nl);
}
//    运行结果:我输入空格回车这些没任何显示,按F6显示ZZZZ。

xieglt 发表于 2020-11-17 10:50:42

EOF是 ctrl+c

HWitty 发表于 2020-11-17 11:07:42

xieglt 发表于 2020-11-17 10:50
EOF是 ctrl+c

那我输入空格回车这些,并没有显示个数啊

jackz007 发表于 2020-11-17 11:23:01

本帖最后由 jackz007 于 2020-11-17 11:24 编辑

      光按 Ctrl-Z 不行,还得按下回车键。
      按下 F6 后,再按下回车键效果也是一样的。

xieglt 发表于 2020-11-17 11:24:23

HWitty 发表于 2020-11-17 11:07
那我输入空格回车这些,并没有显示个数啊

getchar() 函数是把键盘输入保存在缓冲区中。
接收到回车键后才会继续往下执行。
getchar()是一个独占函数,进去了就出不来,除非输入回车。
按ctrl+C后会导致循环结束。
所以不建议用getchar,也不建议用EOF作为循环结束标志。

xieglt 发表于 2020-11-17 11:43:32

代码可以这样写,按ESC退出
#include<stdio.h>
#include <conio.h>
#include <stdio.h>

#defineESCAPE        (27)

void main()
{
        int c ,nb, nt ,nl;
        nb=nt=nl=0;

        while(!kbhit())
        {
               
                c=getch();

                if(c==ESCAPE)
                {
                        break;
                }

                if(c==' ')
                {
                        ++nb;
                }
                if(c=='\t')
                {
                        ++nt;
                }
                if(c=='\r')
                {
                        ++nl;
                        printf("\n");
                }
                printf("%c",c);
        }
        printf("%d, %d, %d\n", nb, nt, nl);
}
页: [1]
查看完整版本: 如何理解这个程序