C printf()函数不显示输出内容
·
C printf()函数不显示输出内容
#include<stdio.h>
int main()
{
char c;
int letters=0,spaces=0,digits=0,others=0;
printf("请输入一些字母:\n");
while((c=getchar())!='\n')
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
letters++;
else if(c>='0'&&c<='9')
digits++;
else if(c==' ')
spaces++;
else
others++;
}
printf("字母=%d,数字=%d,空格=%d,其他=%d\n",letters,digits,spaces,others);
return 0;
}
运行上面的代码,本意是提示用户输入,可是程序编译运行后只有光标闪烁并看不到提示语,在光标后输入 2 5后,程序才出现提示语:“请输入一些字母:”,并且运算结果也正确。
原因:
printf是一个行缓冲函数,先写到缓冲区,满足条件后,才将缓冲区刷到对应文件中,刷缓冲区的条件如下:
1 缓冲区填满
2 写入的字符中有"\n" "\r"
3 调用fflush手动刷新缓冲区
4 调用scanf要从缓冲区中读取数据时,也会将缓冲区内的数据刷新
当然,执行printf的进程或线程结束后,会自动调用fflush刷新缓冲区。
缓冲区大小1024字节。
那么如何让我们的提示语出现呢?使用fflush()函数强制刷新缓冲区就可以了,上面的程序改为
#include<stdio.h>
int main()
{
char c;
int letters=0,spaces=0,digits=0,others=0;
printf("请输入一些字母:\n");
fflush(stdout); // 强制刷新缓存区
while((c=getchar())!='\n')
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
letters++;
else if(c>='0'&&c<='9')
digits++;
else if(c==' ')
spaces++;
else
others++;
}
printf("字母=%d,数字=%d,空格=%d,其他=%d\n",letters,digits,spaces,others);
return 0;
}
再次编译运行,这次就是我们想要的效果了。
更多推荐
已为社区贡献2条内容
所有评论(0)