DEVC++输入不起作用

问题描述:

我试图重定向.txt的内容,以.EXEDEVC++输入不起作用

的Program.exe < file.txt的

和file.txt的内容是

35345345345 
34543534562 
23435635432 
35683045342 
69849593458 
95238942394 
28934928341 

但数组中的第一个索引是文件路径,并且不显示文件内容。

int main(int argc, char *args[]) 
    { 
    for(int c = 0; c<argc; c++){ 
      cout << "Param " << c << ": " << args[c] << "\n"; 
    } 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

所需的输出:

Param0: 35345345345 
Param1: 34543534562 
Param2: 23435635432 
Param3: 35683045342 
Param4: 69849593458 
Param5: 95238942394 
Param6: 28934928341 
+2

你能显示你的代码吗? – 2013-03-08 23:45:00

+0

很难说没有看到该程序的来源,你可以添加到该问题? – fvu 2013-03-08 23:46:00

+0

编辑,包括src。 – 2013-03-08 23:47:32

myapp < file.txt语法传递给stdin(或cin如果你愿意),而不是争论。

+0

嗯。我懂了。是否有可能改变行为? – 2013-03-08 23:52:47

+0

你在用什么外壳?看到medgno的回答。 – Barmar 2013-03-08 23:54:34

+0

@FábioSilva:没有。 – Dave 2013-03-08 23:58:40

当你说“但在数组中的第一个索引文件路径和不显示文件内容。”这听起来像你正在尝试从argv和argc读取输入。角支架壳操作员不会那样工作。相反,stdin(cin和几个C函数读取的内容)具有该文件的内容。所以,要从上面的案例中读取文件,你需要使用cin。

如果你改为真的想把文件自动插入参数列表中,我不能帮你用windows shell。但是,如果你有使用bash的选项,下面的工作:

program.exe `cat file.txt` 

反引号运算符扩展到包含在该命令的结果,然后这样的内容作为参数传递给PROGRAM.EXE传递(再次,在bash外壳,而不是Windows外壳程序)下

+0

谢谢。我正在使用Windows atm。顺便说一句,这是有用的,因为我大部分时间使用Linux。 – 2013-03-09 00:04:30

您误解了argcargv的用途。它们包含程序的命令行参数。如果,例如,你跑:

program.exe something 123 

空终止字符串指向argvprogram.exesomething123

您正试图使用​​< file.txt将文件的内容重定向到program.exe。这是而不是的一个命令行参数。它只是将文件的内容重定向到程序的标准输入。要获取这些内容,您需要从std::cin中提取。

这段代码完成了我期望用另一个做的事情。谢谢每个人的帮助。

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
string line; 
while (getline(cin, line)) 
    cout << "line: " << line << '\n'; 
}