оператор printf не выполняется перед оператором scanf в netbean

#c #netbeans #printf #scanf

#c #netbeans #printf #scanf

Вопрос:

 #include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,N;
    for(i=0;i<5;i  )
    {
        printf("Enter The Number n");
        scanf("%d", amp;N);
        printf("HELLO %d n",N);
    }
    return 0;
}
 

Когда я выполняю приведенный выше код в NetBeans, вывод не выполняется построчно, все выходные данные выполняются вместе, т.е. один раз, когда цикл заканчивается…Проблема в том, что printf и scanf не работают

Комментарии:

1. Ваш код выглядит нормально. Вероятно, у вашей IDE есть проблемы / проблемы с настройками.

2. Каковы ваши точные входные и выходные данные?

3. @nIcEcOw. Это UB. Однако Windows определяет его afaik (но этот вопрос не помечен как Windows).

4. @nIcEcOw; UB = неопределенное поведение: вы не можете сделать это в коде, строго соответствующем стандарту C, который не позволяет очищать буферы чтения. Ваше предложение, возможно, является решением проблемы OP (хотя мы мало знаем об этом, потому что OP не предоставляет входные данные, которые она предоставила, и выходные данные, которые она получила), если это программное обеспечение должно работать только на компьютере с Windows. Но это не переносимо (и не работает, например, на большинстве машин Linux).

5. Ваша проблема довольно проста: Netbeans (повторно) направляет ввод-вывод на себя, вместо этого консоль приводит к тому, что среда выполнения C не обнаруживает подключенных интерактивных устройств, что означает, что STDIN и STDOUT буферизуются по умолчанию, а не буферизуются или небуферизуются. У вас не возникнет никаких проблем с выполнением точно такой же программы вне среды IDE. Обходной путь: вручную отключить буферизацию или fflush(STDOUT) инструкции добавления.

Ответ №1:

Ваше описание проблемы на самом деле довольно хорошее:

Многие библиотеки времени выполнения C могут определять stdout , подключен ли он к интерактивному устройству (окно консоли / терминал) или нет.
В зависимости от этого выбирается режим буферизации по умолчанию.

Запустите программу на терминале / в окне консоли, и вместо этого вы получите стандартную буферизацию для интерактивных устройств.

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

 setvbuf(stdout, 0, _IOLBUF, BUFSIZ);
 

перед любыми другими операциями в этом потоке для потока будет установлена stdout операция с буферизацией строки по умолчанию.

Комментарии:

1. Просто из любопытства, я уже сталкивался с этим иногда: что такое STDOUT и STDIN ? Это особая вещь для Windows? И отличаются ли они от стандартных stdout и stdin ?

2. @mafso: Нет, это просто плохая капитализация, которую я, очевидно, иногда тоже делаю.