【发布时间】:2010-12-02 09:43:07
【问题描述】:
首先让我说这与家庭作业有关。然而,这是作业中非常小且相对微不足道的部分。
C 程序通过命令行参数接收输入,但它需要采用以下形式:
$ ./program < input
如何,我会以字符串的形式接收该输入吗?每次我尝试从 argv 打印出第三个参数时,我都会收到以下消息:
输入:没有这样的文件或目录。
【问题讨论】:
首先让我说这与家庭作业有关。然而,这是作业中非常小且相对微不足道的部分。
C 程序通过命令行参数接收输入,但它需要采用以下形式:
$ ./program < input
如何,我会以字符串的形式接收该输入吗?每次我尝试从 argv 打印出第三个参数时,我都会收到以下消息:
输入:没有这样的文件或目录。
【问题讨论】:
实际上,这是在编程比赛中使用的一种非常常见的技术。您的程序需要的数据存储在一个文件中,比如说 data.txt ,然后使用 shell 上的“./program
所以,在你的源代码中,你需要做的是这样的:
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
string tmp;
string full_content;
while (cin >> tmp)
full_content += " "+tmp;
cout << full_content << endl;
}
.. 并且您将从文件中的字符串中获取所有数据(并以空格分隔)。
这是一种方法,我希望它有所帮助。 []的
【讨论】:
去掉'
$ ./program -Dflag 七=ixnay FromDinger
在您的应用程序中,试试这个:
int main( int argc, char **argv )
{
int i;
for( i = 0 ; i < argc ; ++i )
printf( "Arg %d = %s\n", i, argv[i] );
return 0;
}
您会注意到第一个参数是可执行文件的名称(在索引 0 处),而您的第二个参数(在索引 1 处)将是“-Dflag”
【讨论】:
sed.
如果我不得不猜测,我会认为:
input: No such file or directory.
来自 shell,因为它无法打开指定的文件:“输入”。
另一方面,如果您真的希望 < input 作为程序的参数,您可以转义或引用它们,这样 shell 就不会解释它们。 (转义为读者的练习:-))。
【讨论】:
< 表示程序将从指定文件 (input) 中读取它的标准输入 (stdin)。所以只需从标准输入读取(使用fgets、fread 等)。
【讨论】:
这是一个 Unix shell 的东西。 someprogram < somefile 形式告诉 someprogram 使用 somefile 作为其输入来运行。如果您想做一些涉及< 符号的不同操作,则需要引用它。
【讨论】:
你可以通过阅读标准输入来获得它。
【讨论】:
你需要对'
如果你使用的是 bash,那么:
./program '<' input
或
./program \< input
其他 shell 可能会有所不同(例如,Windows 的默认值 cmd.exe,使用 ^ 作为转义字符,而不是 \)。
【讨论】:
./program < input 语法是一种特殊的 shell 语法,表示“将名为 input 的文件中的所有内容重定向到程序的标准条目”。
要读取输入,您的程序只需使用标准输入读取函数,行fgets 或scanf。
【讨论】:
fgets 或scanf 行。" 具体来说,在stdin 流上.
scanf() 还对什么其他流进行操作? :P
在 *nix 系统上,argv 不会有第三个元素。如果您在几乎任何类 Unix 的 shell 上执行该命令,它将类似于执行此操作:
cat input | ./program
所以您的./program 在argv 中只有一个元素,但它的stdin 是文件input,所以要读取文件,您只需从stdin 读取。请注意,这是设计程序的一种完全有效的方法。如果没有给出文件,许多 Unix 程序会从标准输入中读取,这样您就可以通过管道输入来自其他程序(或者在这种情况下,来自文件)的输入。
【讨论】:
./program 没有被赋予任何参数。
< 之后的不是命令行参数。该文件的内容将通过 shell 传送到您的程序中。
您需要做的就是从标准输入中读取,然后您将获得文件的内容。
【讨论】: