2009-09-20 103 views
0

我是C编程的新手,我来自Java背景。我想知道为什么在下面的代码中,在while循环中,我必须键入我的输入十次,然后显示所有十个输入。我尝试输入一次,然后立即显示。然后继续输入我的其他输入。帮助while循环在C

#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); 


} 


} 

回答

5

尝试每个print(input)

+0

fflush(stdout);工作得很好。谢谢大家 – user69514

+0

是的,与'\ n'相比,fflush肯定是更好的方式。 – LJM

+0

谢谢你帮助我解决了类似的问题,现在我不必再问它了! – Sankofa

1

尝试在打印中放置'\ n'字符。该流只是没有被刷新。

1

在您最终的打印语句之后,您可能会调用fflush(stdout);将stdout刷新到屏幕。

1

您需要刷新标准输出。​​应该这样做,打印后添加。

1

通过缺省输入后冲洗fflush(stdout) /输出进行缓冲,即输入和输出的字节被存储在字节数组显示给流之前。
系统中的BUFSIZ通常是1024的倍数。尽管printf是行缓冲的,但遇到换行符时,会自动刷新缓冲区 。
fflush(stdout)导致缓冲的数据被刷新为输出流,在这种情况下是stdout。 您可以使用setvbuf()功能控制缓冲区处理功能

+0

请注意,stdout是行缓冲的,因此您不需要等待BUFSIZ字符。 –

+2

fflush不会导致缓冲数据“显示在屏幕上”。它会导致程序的标准输出流清除其缓冲区。 *如果* stdout与屏幕上当前可见的tty相关联,则它偶尔会使文本显示在屏幕上。 (换句话说:标准输出*不*屏幕,不要做出这样的假设。) –

+0

@威廉姆斯,托马斯..感谢您的意见编辑指出。 – sud03r

0

您的print是复制/粘贴错误,对不对?它应该是printf

而且你真的不应该直接以printf格式打印用户字符串。
想象用户类型"%d%f%s\a%c" ...

的最好的事情就是

printf("%s\n", input); 

随着格式的“\ n”,你不需要fflush(stdout);因为标准输出线默认缓冲和'\ n'自己做一个。

此外,如果用户键入"%d%f%s\a%c"这就是您打印的内容。


的最好的事情就是

puts(input); 

放添加“\ n”用来输出,并具有与格式字符串没有问题。