在Netbeans的STDIN

时间:2009-06-06 09:15:20

标签: c++ netbeans

有人知道..如何在Netbeans中将文件读取到STDIN 我在Netbeans中遇到了问题。该计划的工作方式如下:

./myprog < in.txt 

这是一个C ++项目。 任何想法?

编辑:我有Proglems设置netbeans。我在哪里可以说:阅读/使用这个文件? 在控制台上,它工作正常!

5 个答案:

答案 0 :(得分:3)

我不相信有一种方法可以让NetBeans将输入管道传输到您的程序(该功能由您的shell处理)。如果要在IDE中测试或调试程序,最好的方法是允许它将文件名作为参数,或者如果没有给出文件名,则返回标准输入。然后,您可以调整项目运行配置并提供测试文件名作为参数。

请注意,如果您尝试在运行配置中使用“&lt; file”,那么它将直接传递给您的程序,因为没有shell拦截它。

[编辑]我找到了一种方法,虽然它有点弱。

NetBeans(至少在我的Mac上)通过名为dorun.sh的脚本运行C ++程序,该脚本位于我的主目录下的.netbeans文件夹下。它包括一条接近末尾的线:

“$ pgm”“$ @”

引号转义&lt;&lt;您的项目属性中的运算符,因此您可以删除引号(并接受后果),或包含&lt;他们之间:

“$ pgm”&lt; “$ @”

并简单地包含文件名作为参数。

如果你不知道在哪里找到参数,它就在项目属性中,不在文件菜单中。

如果您在Windows上使用NetBeans,我不确定它用于启动程序的脚本(如果有)。另请注意,如果使用输出窗口而不是外部终端(此设置位于同一窗口中),则不起作用。

[编辑编辑]在尝试调试程序时也不行......最好只修改代码来处理从文件或stdin读取的内容。

答案 1 :(得分:3)

我同意JimG关于处理此问题的最佳方法(通过文件名作为参数,如果没有则返回stdin)。您还可以通过make标志将标志传递给代码,并在代码中有条件地使用freopen,如下所示:

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

然后在项目属性中 - &gt;构建 - &gt;制作 - &gt;构建命令,您可以执行以下操作:

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

你的Makefile显然必须传递DEBUG_FLAGS,如下所示:

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

我使用这种方法,因为我总是在netbeans内外使用相同的再生make文件,并且它是代码本身的3行修复。我想解析cmdline只是在一个地方,但是对于他自己的每一个。

答案 2 :(得分:1)

Actualy刚刚在C ++项目中使用Ubuntu linux下的netbeans 8有同样的问题。

现在您可以将文件作为输入参数传递,您只需要以正确的方式执行:

File->Project Properties->Run->Run Command下 加上这个:

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

逗号之间的第二部分是文件的完整路径。 它甚至在调试时使用 - 非常有用。

答案 3 :(得分:0)

您是否可以访问NetBeans IDE中的常规标准库类?如果是这样,通常使用cin实例访问STDIN:

std::string line;
while (std::getline(cin, line))
{
  // do something with line...
}

答案 4 :(得分:0)

据我所知,Netbeans只是一个IDE,它可以配置为使用一些不同的编译器。您的代码应该根据编译器的期望进行编码,但是如果您使用标准库,则不应该有任何问题。