如何理解这个程序
#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。 EOF是 ctrl+c xieglt 发表于 2020-11-17 10:50
EOF是 ctrl+c
那我输入空格回车这些,并没有显示个数啊 本帖最后由 jackz007 于 2020-11-17 11:24 编辑
光按 Ctrl-Z 不行,还得按下回车键。
按下 F6 后,再按下回车键效果也是一样的。 HWitty 发表于 2020-11-17 11:07
那我输入空格回车这些,并没有显示个数啊
getchar() 函数是把键盘输入保存在缓冲区中。
接收到回车键后才会继续往下执行。
getchar()是一个独占函数,进去了就出不来,除非输入回车。
按ctrl+C后会导致循环结束。
所以不建议用getchar,也不建议用EOF作为循环结束标志。 代码可以这样写,按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]