Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 代码块重定向输入输出_C_Redirect_Input_Codeblocks_Output - Fatal编程技术网

C 代码块重定向输入输出

C 代码块重定向输入输出,c,redirect,input,codeblocks,output,C,Redirect,Input,Codeblocks,Output,我对代码块还不熟悉,似乎无法让它与output的命令行参数一起工作。有人知道怎么做吗 我目前能够读取从argv[1]传递的文件,但程序不会自动读取给定文件的输入,也不会将输出更正为文件输出 我知道它在set程序的参数上,我的参数行是:list.txtoutput 经过一些研究后,我看到一个人这样做:/output,似乎运行一个程序来提供输入和输出,无论如何,我也尝试过,但没有效果。我是否需要使用文件处理程序与之交互?没有意义,简单的getchar()应该从传递的输入文件中读取 我错过了什么 提前

我对代码块还不熟悉,似乎无法让它与output的命令行参数一起工作。有人知道怎么做吗

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

我知道它在set程序的参数上,我的参数行是:list.txtoutput

经过一些研究后,我看到一个人这样做:/output,似乎运行一个程序来提供输入和输出,无论如何,我也尝试过,但没有效果。我是否需要使用文件处理程序与之交互?没有意义,简单的getchar()应该从传递的输入文件中读取

我错过了什么


提前感谢

我已经使用Code::Blocks一段时间了,最近注意到Windows中的Code::Blocks 12.11也是如此。重定向Set programs参数中不起作用

黑客解决方案是在构建后步骤中执行

右键单击
项目名称->构建选项…->构建前/后步骤->构建后步骤:

cmd /C cd /D "bin\$(TARGET_NAME)\" & YourApplicationNameHere.exe >output.txt 2>errors.txt
并选中“始终执行”复选框,即使目标是最新的。
现在点击Ctrl+F9,程序将作为构建过程的最后一步执行。

我在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}
工具->配置工具->添加:
姓名:随便
可执行文件:C:\Windows\System32\cmd.exe

参数:/C${TARGET\u OUTPUT\u BASENAME}示例arg1我认为问题在于
cb\u console\u runner.exe
在IDE中启动程序<代码>控制台浏览器
无法解释重定向符号。因此,我在代码块13.12的原始代码中添加了一些代码。 请将链接文件复制到[cb文件夹]。(别忘了备份原件。)

二进制:

源代码:

通过在“项目”菜单中设置程序参数,我可以将输入重定向到我的c程序


导航到
顶部菜单>项目>设置程序的参数
并放置
我尝试了几乎所有的选项,但都失败了:p
在厌倦了所有这些之后,我基本上使用文件处理来完成我的工作(phew)

下面是我在代码中所做的

在全球范围内,我写道:

#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

&

output.txt

对该项目的支持


这是意料之中的事

我知道这是一个老话题,但没有一个解决方案足够好。对于Windows,我可能会在全局范围内使用以下宏定义(因为调试打印或类似操作也可能需要它)

#include <cstdio>
#ifdef DEBUG
    #define D(X) X
#else
    #define D(X)
#endif
并在“项目>构建选项”下的“代码::块”中定义…>(调试,编译器设置,#定义)

调试

预期“input.txt”是其他.c或.cpp文件所在文件夹中的文本输入文件,“output.txt”将是在同一文件夹中生成的输出文件(或者它们都可以作为此类文件添加到项目中以便于编辑/查看)


此解决方案将同时适用于cin/cout和scanf/printf。

此解决方案仅重定向标准输入和输出。使用
printf()
scanf()
put()
getline()
等应该可以。它仍然不起作用:(我更改了getchar()为了得到我想要的整行,现在我在字符串中一个字符一个字符地得到,但是,当我运行它时,它仍然等待手动输入。我真的认为这是一个代码块问题。不,这不是一个代码块问题,无论如何,你都遗漏了一些东西…想象一下,IDE可以做什么?它甚至不是一个编译器…嗯,我去了linux,输入命令rks很好,所以这一定是IDE的问题。而且,它读取getchar()很好,不需要扫描@d0pe或从@d0pe读取。您能给出一个示例程序,展示您演示的问题以及重现问题所需的步骤吗?使用Code::Blocks 16.01尝试过,但这不起作用,因为它导致调用执行:“C:\程序文件(x86)/CBO-COSOLeE.Surrun.exe”“c:\Work\CPP\cOut\cOut.exe”谢谢这是Windows上唯一的一个工作。C++是不理解调试的使用?它的确切用法是什么??,但仅当在本地选择了“调试生成”时。在示例中,如果您按照上面的说明进行操作,并将此类代码提交给分级器,“D”(“和”)之间的任何代码将在编译时被排除,因此,不会因远程系统/分级器上丢失的输入文件而窒息。使用上面的代码/配置,您将获得与在Linux上调试构建“<./input.txt>/output.txt”时用于“设置程序参数”相同的结果。
#include <cstdio>
#ifdef DEBUG
    #define D(X) X
#else
    #define D(X)
#endif
int main() {
   D(freopen("input.txt","r",stdin);)
   D(freopen("ouput.txt","w",stdout);)
   ...