printf работает не так, как ожидалось. Может кто-нибудь объяснить вывод? - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь прочитать две строки с клавиатуры и распечатать их.Почему 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

1 Ответ

1 голос
/ 05 мая 2019

Я не могу воспроизвести вашу проблему, но добавление fflush(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.

...