我是C编程的新手,我来自Java背景。我想知道为什么在下面的代码中,在while循环中我必须输入十次输入,然后显示所有十个输入。我想尝试输入一次并立即显示。然后继续输入我的其他输入。
#include <stdio.h>
#include <stdlib.h>
#include "Helper.h"
main(){
print(PROGRAM_INFO); //prints program name and author
print(PROMPT);
char input [100]; //array to hold input from user
int isActive = 1; //1 continue shell, 0 terminate shell
int count = 0;
while (isActive == 1 && count < 10){
print(PROMPT);
++count;
scanf("%s", input);
print(input);
}
}
答案 0 :(得分:5)
在每个fflush(stdout)
print(input)
答案 1 :(得分:1)
尝试在打印件中加上'\ n'字符。流没有被刷新。
答案 2 :(得分:1)
答案 3 :(得分:1)
您需要刷新STDOUT。 fflush(STDOUT)
应该这样做,在打印后添加。
答案 4 :(得分:1)
默认输入/输出是缓冲的,即输入和输出字节在显示到流之前存储在字节数组中。
系统中的BUFSIZ通常是1024的倍数。虽然printf是行缓冲的缓冲区
遇到换行符时会自动刷新
fflush(stdout)导致缓冲的数据被刷新为输出流,在本例中为stdout。
您可以使用setvbuf()函数
答案 5 :(得分:0)
您的print
是复制/粘贴错误,对吗?它应该是printf
。
你真的不应该以printf的格式直接打印用户字符串。
想象一下用户输入"%d%f%s\a%c"
...
最好的办法是
printf("%s\n", input);
使用格式中的'\ n',您不需要fflush(stdout);
,因为默认情况下stdout是行缓冲的,'\ n'自己做一个。
此外,如果用户键入"%d%f%s\a%c"
,那就是您打印的内容。
最好的办法是
puts(input);
puts将'\ n'添加到输出中,格式字符串没有问题。