2012-11-08 138 views
6

我是新来的代码块,我似乎无法让它与<输入>输出的命令行参数一起工作。有谁知道如何?代码块重定向输入输出

我目前能够读取从argv [1]传递的文件,但程序不会自动读取给定文件的输入,也不会正确输出文件输出。

我知道它是一套程序的参数,我的论点行是:LIST.TXT <输入>输出

经过一番研究,我看到一个人做这样的:< ./input> ./输出,似乎运行一个程序来给输入和输出,反正,我也试过了,无济于事。我是否需要使用文件处理程序与它进行交互?它不会使得sence简单,getchar()应该从传入的输入文件中读取。

我在这里错过了什么?

在此先感谢

+1

这仅重定向标准输入和输出。使用'printf()'和'scanf()''puts()'和'getline()'等应该没问题。 – 2012-11-08 19:00:45

+0

它仍然不工作:(我已经改变了getchar()得到,因为我想要整个行,现在我得到字符串内的字符char,但是,当我运行它时,它仍然等待手动输入。真的认为这是一个codeblocks问题 – d0pe

+0

不,这不是一个codeblocks的问题,你有什么想法,IDE可以做什么?它甚至不是一个编译器...... – 2012-11-08 19:50:06

回答

5

现在我已经和公正的工作与代码:: Blocks的一段时间最近注意到同一至少在Windows代码:: Blocks的12.11。该重定向><没有在项目工作 - >设置程序参数...

一个hackish的解决办法是做后期生成步骤执行。

右击project name -> Build options... -> Pre/post build steps -> Post-build steps:

cmd /C cd /D "bin\$(TARGET_NAME)\" & YourApplicationNameHere.exe >output.txt 2>errors.txt 

并勾选始终执行,即使目标是跟上时代的。 现在点击Ctrl + F9并且该程序作为构建过程的最后一步执行。

7

我已经找到一种方法如何做到这一点的CB 13.12

Tools -> Configure Tools -> Add: 

Name: whatever 
Executable: C:\Windows\System32\cmd.exe 
Parameters: /C ${TARGET_OUTPUT_BASENAME} exampleArg1 <inputFileRedirect.txt 
Working Directory: ${TARGET_OUTPUT_DIR} 

它basicaly启动Windows控制台并通过参数它。 您也可以将键盘快捷键分配给这些工具。 我可以看到的唯一缺点是这些工具不是项目特定的。

+0

谢谢你是唯一一个能够工作的人Windows。 – CodeMonkey

1

我能够在项目设置程序参数以获取输入重定向到我的C程序菜单。

导航到Top Menu>Project>Set programs' arguments并把</absolute/path/to/yourinputfile通知<在开始它将代码块引入重定向文件,而不是传递参数。

enter image description here

+0

尝试使用Code :: Blocks 16.01,但这不起作用,因为它导致调用'执行:“C:\ Program Files(x86)\ CodeBlocks/cb_console_runner.exe”“C:\ Work \ cpp \ cout \ cout。 exe“ Vadzim

+1

这种方法只适用于linux –

0

我几乎尝试了所有的&未能使其工作的选项:P 变得厌倦了一切之后,我基本上是用文件处理,让我的工作做完(唷)

这里是我的代码

在全球范围内我写的那样:

#define DEBUG 

#ifdef DEBUG 
#include<fstream> 

ifstream Inputfile; 
ofstream Outputfile; 

#define cin  Inputfile 
#define cout Outputfile 

#endif //#ifdef DEBUG 

&主我写了做任何事情之前如下:

#ifdef DEBUG 

    Inputfile.close(); 
    Outputfile.close(); 

#endif // #ifdef DEBUG 

在此之后添加了两个文件

INPUT.TXT:

int main(){ 
#ifdef DEBUG 

    Inputfile.open("Input.txt"); 
    Outputfile.open("Output.txt");; 

#endif // #ifdef DEBUG 

最后只关闭主进程这样做之前

&

output.txt的

到项目

这和预期一样

0

我知道这是一个老话题了,但是这些解决方案都不够好。对于Windows,我可能会用下面的宏定义去(因为你可能需要它也用于调试印刷或类似)在全球范围内

#include <cstdio> 
#ifdef DEBUG 
    #define D(X) X 
#else 
    #define D(X) 
#endif 

然后作为第一或第二线(如果你需要的std :: IOS :: sync_with_stdio(假);)的主要用途是作为

int main() { 
    D(freopen("input.txt","r",stdin);) 
    D(freopen("ouput.txt","w",stdout);) 
    ... 

而在代码:: Blocks的定义下的项目>编译选项...>(调试器,编译器设置,#define语句)

调用

期待“input.txt”是文件夹中的文本输入文件,其中.c或.cpp文件的其余部分是,而“output.txt”将是在同一文件夹中生成的输出文件(或他们可以作为这样的文件添加到项目中以便于编辑/查看)。

该解决方案可以同时用于cin/cout和scanf/printf。