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
答案 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)
,则该过程将重复。