Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scanf保持输出不显示_C_Scanf - Fatal编程技术网

scanf保持输出不显示

scanf保持输出不显示,c,scanf,C,Scanf,scanf()如何保持printf的输出不出现在屏幕上?循环必须是迭代的,因为i的值正在增加,如输出所示。为了澄清,循环如何在不显示printf输出的情况下进行迭代 代码: 这是因为只有在按enter键之后,输出才会刷新到输出窗口,直到它被缓冲 stdout流是缓冲的,因此将只显示 在它到达换行符后(或当它被告知要换行时)进行缓冲。你有一个 可立即打印的选项很少: 改用fprintf打印到stderr: 在需要时使用fflush刷新标准输出: 有关详细说明: 出现此问题是因为stdin已缓冲 s

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

代码:


这是因为只有在按enter键之后,输出才会刷新到输出窗口,直到它被缓冲

stdout流是缓冲的,因此将只显示 在它到达换行符后(或当它被告知要换行时)进行缓冲。你有一个 可立即打印的选项很少:

改用fprintf打印到stderr:

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

有关详细说明:

出现此问题是因为
stdin
已缓冲

scanf()
不会阻止printf的输出出现。这是在
scanf()
开始使用
char
s之前的测试

只有按enter键(
\n
)后,
scanf()才能使用该输入。第一次调用
scanf(“%c”和&chr)
然后取出1
char
。第二次调用
scanf()
无需等待,因为数据可从
stdin
获得。
scanf(“%c”和&chr)
每次读取
char
s“这是一个测试”


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

但在第二个循环之前是否遇到printf?@bh3244
printf(“请…”
在第一个循环之前遇到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
)中提取1
char
并返回。在第二次调用时,一个
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