scanf保持出现的输出

时间:2013-12-20 23:17:57

标签: c scanf

scanf()如何保持printf的输出出现在屏幕上?循环必须是迭代的,因为我的值正在增加,如输出所示。为了澄清,循环如何迭代而不显示printf的输出?

代码:

char string[100] = {0};
char chr = 0;
int i = 0;
printf("Please enter the string you would like reversed:\n");
while (chr != '\n'&& i<99)
{
    scanf("%c", &chr);
    string[i] = chr;
    printf("%d %c\n", i,chr);
    i++;
}

输出:

Please enter the string you would like reversed:
This is a test
0 T
1 h
2 i
3 s
4
5 i
6 s
7
8 a
9
10 t
11 e
12 s
13 t
14


Your reversed string is:
tset a si sihT

2 个答案:

答案 0 :(得分:1)

这是因为输入只有在按下回车后才会刷新到输出窗口,直到它被缓冲为止

  

stdout流被缓冲,因此只显示其中的内容   缓冲区到达换行符后(或者告诉它)。你有一个   几乎没有立即打印的选项:

     

使用fprintf打印到stderr:

fprintf(stderr, "I will be printed immediately");
  

在需要时使用fflush刷新标准输出:

printf("Buffered, will be flushed");
fflush(stdout); // Will now print everything in the stdout buffer

详细说明:

Why does printf not flush after the call unless a newline is in the format string?

答案 1 :(得分:1)

出现此问题是因为缓存了stdin

scanf()不会显示printf的输出。在stdin开始使用This is a test\n之前,scanf()显示为char

在您输入(scanf())之前,\n无法使用输入。第一次拨打scanf("%c", &chr)然后拨打1 char。对scanf()的第二次调用无需等待,因为数据可从stdin获得。 char s“这是一个测试\ n”,一次一个地读取scanf("%c", &chr)

如果代码再次循环并调用scanf("%c", &chr),则该过程将重复。