Подтвердить что ты не робот

C/С++ printf() перед вызовом scanf()

Я использую Eclipse для кода на C/С++, и я боюсь, что может быть что-то довольно простое. В моем коде ниже я использую printf() и после scanf(). Althougth printf записывается до scanf(), выход отличается. Мне удалось узнать что-то о подобной проблеме здесь. Но я не смог его решить. Любые идеи?

код:

#include <stdio.h>

int main()
{
    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

Ожидаемый результат:

Enter a number:1
1

Вместо этого я получаю:

1
Enter a number:1
4b9b3361

Ответ 1

Ваш вывод буферизуется. У вас есть 4 варианта:

  • явный флеш

    fflush после каждой записи, чтобы извлечь выгоду из буфера и по-прежнему принудительно использовать желаемое поведение/отображение.

    fflush( stdout );
    
  • имеют буфер только буферные линии-мудрый

    полезно, когда вы знаете, что достаточно напечатать только полные строки

    setlinebuf(stdout);
    
  • отключить буфер

    setbuf(stdout, NULL);
    
  • отключить буферизацию в консоли через любое меню настроек, которое оно предоставляет


Примеры:

Вот ваш код с опцией 1:

#include <stdio.h>
int main() {

    int myvariable;

    printf("Enter a number:");
    fflush( stdout );
    scanf("%d", &myvariable);
    printf("%d", myvariable);
    fflush( stdout );

    return 0;
}

Вот 2:

#include <stdio.h>
int main() {

    int myvariable;

    setlinebuf(stdout);    

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

и 3:

#include <stdio.h>
int main() {

    int myvariable;

    setbuf(stdout, NULL);     

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

Ответ 2

Итак, я, наконец, использовал что-то похожее на то, что @zsawyer написал как вариант, помеченный как 3. В моем коде я вставил эту строку:

setvbuf(stdout, NULL, _IONBF, 0);

Как первая строка в main():

#include <stdio.h>

int main()
{
    setvbuf(stdout, NULL, _IONBF, 0);

    int myvariable;

    printf("Enter a number:");
    scanf("%d", &myvariable);
    printf("%d", myvariable);

    return 0;
}

Я получил его из здесь.