1

我正在尝试从键盘读取两个字符串并打印它们。为什么会printf("read 1st\n")在秒后运行scanf()

#include <stdio.h>

int main(void)
{
    char str[20];
    char str2[20];

    scanf("%s", str);
    printf("read 1st\n");
    scanf("%s", str2);
    printf("read 2nd\n");

    printf("str: %s\nstr2: %s\n", str, str2);

    return 0;
}
Expected:
foo
read 1st
bar
read 2nd
str: foo
str2: bar

Actual:
foo
bar
read 1st
read 2nd
str:foo
str2:bar
4

1 回答 1

1

我无法重现您的问题,但添加 afflush(stdout);应该可以解决您的问题。

scanf("%s", str);
printf("read 1st\n");
fflush(stdout); // Ensures that the above is printed before scanf is executed
scanf("%s", str2);
printf("read 2nd\n");

我还将扫描更改为scanf("%19s", str);. 否则,如果您输入的字符串超过了str可以容纳的长度,可能会发生不好的事情。

于 2019-05-05T11:10:21.643 回答