STDIN в Netbeans - PullRequest
       33

STDIN в Netbeans

3 голосов
/ 06 июня 2009

Кто-нибудь знает .. как читать файлы в STDIN в Netbeans.
У меня проблема с моей программой в Netbeans. Программа работает так:

./myprog < in.txt 

Это проект C ++. Есть идеи?

Редактировать: у меня есть Proglems с настройкой NetBeans. где я могу сказать: ПРОЧИТАЙТЕ / ИСПОЛЬЗУЙТЕ ЭТОТ ФАЙЛ? На консоли просто отлично работает!

Ответы [ 5 ]

3 голосов
/ 14 декабря 2011

Я согласен с JimG относительно лучшего способа справиться с этим (через имя файла в качестве параметра, возвращаясь к stdin, если его нет). Вы также можете передать флаг своему коду с помощью make-флага и условно использовать freopen в своем коде, например:

#ifdef NETBEANS
  freopen("input.txt", "r", stdin);
#endif

Затем в Project Properties -> Build -> Make -> Build, вы можете сделать что-то вроде:

${MAKE} -f Makefile "DEBUG_FLAGS=-DNETBEANS"

Ваш Makefile, очевидно, должен был бы передавать DEBUG_FLAGS, что-то вроде этого:

.cpp.o: $<
    $(CC) $(DEBUG_FLAGS) $(CFLAGS) $(INCLUDES) -o $@ $<

Я использую этот метод, так как я всегда использую один и тот же переработанный make-файл внутри и снаружи netbeans, и это 3-строчное исправление в самом коде. Я полагаю, что синтаксический анализ строки cmd находится в одном месте, но для каждого - свой.

3 голосов
/ 06 июня 2009

Я не верю, что есть способ попросить NetBeans направить ввод в вашу программу (эта функция обрабатывается вашей оболочкой). Если вы хотите протестировать или отладить вашу программу в IDE, лучше всего разрешить ей принимать имя файла в качестве параметра или использовать стандартный ввод, если имя файла не указано. Затем вы можете настроить конфигурацию запуска проекта и указать имя файла теста в качестве аргумента.

Обратите внимание, что если вы попытаетесь использовать "<файл" в конфигурации запуска, это будет просто передано непосредственно вашей программе, потому что нет оболочки, перехватывающей его. </p>

[Редактировать] Я нашел способ, хотя он немного слабоват.

NetBeans (по крайней мере, на моем Mac) запускает программы на C ++ с помощью сценария dorun.sh, который находится в папке .netbeans в моем домашнем каталоге. Она включает в себя строку ближе к концу, как это:

"$ pgm" "$ @"

Кавычки избегают любого использования оператора <в свойствах вашего проекта, поэтому вы можете удалить кавычки (и принять последствия) или добавить <между ними: </p>

"$ pgm" <"$ @" </p>

и просто включите имя файла в качестве аргумента.

Если вы не знаете, где найти аргументы, это в свойствах проекта, вне меню файла.

Если вы используете NetBeans в Windows, я не уверен, какой тип сценария (если он есть) используется для запуска вашей программы. Также обратите внимание, что это не работает, если вы используете окно вывода вместо внешнего терминала (этот параметр находится в том же окне).

[Редактировать, редактировать] Это также бесполезно при попытке отладки вашей программы ... вероятно, лучше всего просто изменить ваш код, чтобы справиться с чтением из файла или стандартного ввода.

1 голос
/ 13 июня 2016

На самом деле, недавно была та же проблема с NetBeans 8 под Ubuntu Linux в проекте C ++.

Теперь вы можете передать файл в качестве входного параметра, вам просто нужно сделать это правильно:

Под File->Project Properties->Run->Run Command Добавьте это:

"${OUTPUT_PATH}" "./main"< "/home/user/projects/C/tests.in"

Вторая часть между запятыми - это полный путь к файлу. И это даже используется при отладке - очень полезно.

0 голосов
/ 06 июня 2009

Насколько я знаю, Netbeans - это всего лишь IDE, и его можно настроить на использование разных компиляторов. Ваш код должен быть закодирован в соответствии с тем, что ожидает этот компилятор, но если вы используете стандартную библиотеку, у вас не должно возникнуть никаких проблем.

0 голосов
/ 06 июня 2009

Есть ли у вас доступ к обычным классам стандартных библиотек в IDE NetBeans? Если это так, обычно вы получаете доступ к STDIN, используя экземпляр cin:

std::string line;
while (std::getline(cin, line))
{
  // do something with line...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...