每N个字符刷新输出缓冲区



我想在每输入三个字符后刷新我的缓冲区(而不是n)。什么是正确的方法来改变行缓冲触发器是从n是每3个字符?

到目前为止,我有这样的东西:

#include<stdio.h>
#define CHAR_BUFFER 3
int main(void)
{
int ch;
int num=0;
while ((ch = getchar()) != EOF) {
if (ch == 'n') continue; // ignore counting newline as a character
if (++num % CHAR_BUFFER == 0) {
printf("Num: %dn", num);
fflush(stdout);
putchar(ch);

}
}
return 0;
}

程序当前生成的是:

$ main.c
Hello how are you?
Num: 3
lNum: 6
Num: 9
wNum: 12
rNum: 15
yNum: 18
?

因此,它似乎只抓取最后一个字符,而不是打印所有三个字符。正确的做法是什么?

下面是我想要的两个例子:

H<enter>
// [nothing returned since we have not yet hit our 3rd character]
el<enter>
Hel // [return 'Hel' since this is now a multiple of three]

putchar()不应该在if内部。如果要打印所有字符,则该条件仅用于冲洗。

#include<stdio.h>
#define CHAR_BUFFER 3
int main(void)
{
int ch;
int num=0;
while ((ch = getchar()) != EOF) {
if (ch == 'n') continue; // ignore counting newline as a character
putchar(ch);
if (++num % CHAR_BUFFER == 0) {
printf("Num: %dn", num);
fflush(stdout);            
}
}
return 0;
}

注意,这是用于刷新输出缓冲区的。它与如何读取或回显输入无关,这需要使用特定于操作系统的函数。

参见从标准输入中捕获字符而不等待按enter键和ANSI C无回声键盘输入

最新更新