0

我是 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);


}


}
4

6 回答 6

5

fflush(stdout)每次尝试冲洗print(input)

于 2009-09-20T03:51:56.150 回答
1

尝试在打印中添加一个 '\n' 字符。流只是没有被刷新。

于 2009-09-20T03:51:28.210 回答
1

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

于 2009-09-20T03:51:35.700 回答
1

您需要刷新 STDOUT。fflush(STDOUT)应该这样做,在打印后添加。

于 2009-09-20T03:51:36.067 回答
1

默认情况下,输入/输出是缓冲的,即输入和输出字节在显示到流之前存储在字节数组中。
系统中的BUFSIZ一般是1024的倍数。虽然printf是行缓冲的,但遇到换行时会自动刷新缓冲区。
fflush(stdout)导致缓冲的数据被刷新到输出流,在这种情况下是标准输出。您可以使用setvbuf()函数控制缓冲区处理

于 2009-09-20T04:14:07.587 回答
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' 添加到输出中,并且格式字符串没有问题。

于 2009-09-20T13:35:20.000 回答