scanf保持输出不显示
scanf()如何保持printf的输出不出现在屏幕上?循环必须是迭代的,因为i的值正在增加,如输出所示。为了澄清,循环如何在不显示printf输出的情况下进行迭代 代码:scanf保持输出不显示,c,scanf,C,Scanf,scanf()如何保持printf的输出不出现在屏幕上?循环必须是迭代的,因为i的值正在增加,如输出所示。为了澄清,循环如何在不显示printf输出的情况下进行迭代 代码: 这是因为只有在按enter键之后,输出才会刷新到输出窗口,直到它被缓冲 stdout流是缓冲的,因此将只显示 在它到达换行符后(或当它被告知要换行时)进行缓冲。你有一个 可立即打印的选项很少: 改用fprintf打印到stderr: 在需要时使用fflush刷新标准输出: 有关详细说明: 出现此问题是因为stdin已缓冲 s
这是因为只有在按enter键之后,输出才会刷新到输出窗口,直到它被缓冲 stdout流是缓冲的,因此将只显示 在它到达换行符后(或当它被告知要换行时)进行缓冲。你有一个 可立即打印的选项很少: 改用fprintf打印到stderr: 在需要时使用fflush刷新标准输出: 有关详细说明: 出现此问题是因为
stdin
已缓冲
scanf()
不会阻止printf的输出出现。这是在scanf()
开始使用char
s之前的测试
只有按enter键(\n
)后,scanf()才能使用该输入。第一次调用scanf(“%c”和&chr)
然后取出1char
。第二次调用scanf()
无需等待,因为数据可从stdin
获得。scanf(“%c”和&chr)
每次读取char
s“这是一个测试”
如果代码再次循环并调用scanf(“%c”,&chr)
,该过程将重复。但在第二个循环之前是否遇到printf?@bh3244printf(“请…”
在第一个循环之前遇到printfing“请输入…”。您输入“这是一个测试”\n“它在控制台上回响。然后在看到\n
之后,数据可供scanf()
使用。然后出现多个printf(“%d%c\n”,i,chr);
。但是scanf()一次只能读取和存储一个字符,因此它必须循环以存储下一个字符,但该printf(“%d%c\n”,i,chr)是的。stdout会等到stdin消失后再输出吗?如果是,是什么迫使它,编译器,操作系统?@bh3244不,下面的说法不太正确:“scanf()一次只读取和存储一个字符”。scanf()的第一次出现
表示它希望从stdin
stdin
缓冲一个char
。它不提供任何char
返回到scanf()
,直到is有一个\n
,如“这是一个测试\n”。因此scanf()
等待\n
到达。然后scanf()
从stdin
(T
)中提取1char
并返回。在第二次调用时,一个h
已准备就绪并等待,然后它立即得到该字符。
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
fprintf(stderr, "I will be printed immediately");
printf("Buffered, will be flushed");
fflush(stdout); // Will now print everything in the stdout buffer