Программы с scanf не работают должным образом в NetBeans - PullRequest
6 голосов
/ 02 февраля 2012

Сегодня я установил NetBeans 7.0.1. Когда я пытаюсь выполнить программу на Си с "scanf", она выдает странные ошибки

Вот что я написал:

Program

Он продолжает работать, пока я не введу что-то в консоль вывода. enter image description here

После ввода его показывает оператор printf и показывает «RUN FAILED»

enter image description here

Может кто-нибудь сказать мне, что я должен сделать, чтобы сделать это правильно?

Ответы [ 6 ]

9 голосов
/ 28 февраля 2013

Да, у меня та же проблема с вами, и решения в ответах не работают на моей машине. После поиска я понимаю, что эта проблема касается внутреннего раздела терминала / консоли Netbean. Внутренняя консоль не может запустить функцию scanf. Так что используйте внешний терминал для вашего проекта. Для этого:

  • Сначала щелкните правой кнопкой мыши на вашем проекте и выберите свойства.
  • В этом окне выберите вкладку «Выполнить» внизу.
  • там есть «Тип консоли», измените этот тип консоли с «внутреннего терминала» на «внешний терминал».

Вот и все.

3 голосов
/ 02 февраля 2012

Ваш printf не сбрасывается, поэтому он не отображается до завершения программы.

Вы не возвращаете значение из main () явно, поэтому возвращается результат scanf (), который равен 1, что интерпретируется как сбой программы.

1 голос
/ 02 февраля 2012

Вам необходимо вернуть 0 в конце main, если не предполагается, что произошла ошибка.

0 голосов
/ 02 февраля 2012

Программа на C без возвращаемого значения приведет к неопределенному поведению (которое единодушно считается плохим). Компилятору разрешено свободно контролировать то, что он возвращает здесь, он, похоже, возвращает результат scanf (), но он может возвращать некоторую атмосферную энтропию для всех забот C Standard.

Что касается строки, не печатающей, то это потому, что вы используете printf () на буферизованном терминале, вам нужно добавить \ n в конце. Причина этого кроется в древних способах Unix, которые давно забыты всеми, кроме самых мудрых гуру Unix.

Что касается ничего не происходящего, пока вы не введете что-то, то это потому, что scanf () блокирует до тех пор, пока ввод не будет получен, на случай, если вы еще не знали об этом. Можно использовать неблокирующие вызовы ввода-вывода, но я не уверен, что это входит в сферу вашего вопроса. (пожалуйста, определите «сделать это правильно»).

0 голосов
/ 02 февраля 2012

Вы не возвращаете 0, что указывает на успешное завершение работы ОС, и вы не ставите завершающий \n на printf, в результате чего строка не печатается (stdin буферизуется):

#include <stdio.h>

int main()
{
    int n;
    printf("Enter the number:\n");
    scanf("%d", &n);
    return 0;
}
0 голосов
/ 02 февраля 2012

Добавить код возврата. main() возвращает целое число, поэтому добавьте return 0; внизу функции main(). Прямо сейчас возвращаемое значение является мусором, и обычно любое значение, отличное от 0, указывает на сбой.

Кроме того, вы могли бы рассмотреть возможность сделать это:

int main(void)

, чтобы быть более явным (хотя это ничего не изменит здесь).

...