首先我要说这与家庭作业有关。但是,这是一项非常小且相对微不足道的任务。
C程序通过命令行参数接收输入,但需要采用以下形式:
$ ./program < input
如何以字符串形式接收输入?每次我尝试从argv打印出第3个参数时,都会收到以下消息:
输入:没有这样的文件或目录。
答案 0 :(得分:21)
&LT;是一个shell重定向 - 它在程序之外处理。您将看到的是发送到标准输入流的文件名“input”的内容。这是程序操作的常用方法,尽管它们通常也处理给出文件名,例如文件名。 sed
。
如果我不得不猜我会想:
input: No such file or directory.
来自shell,因为它无法打开指定的文件:“input”。
另一方面,如果你真的希望< input
作为程序的参数,你可以转义或引用它们,这样shell就不会解释它们。 (逃离左边作为读者的练习: - ))。
答案 1 :(得分:10)
./program < input
语法是一种特殊的shell语法,说“将名为input
的文件中的所有内容重定向到程序的标准条目”。
要阅读输入,您的程序只需使用标准输入读取功能,行fgets
或scanf
。
答案 2 :(得分:5)
在* nix系统上, 不会是argv
的第三个元素。如果你在几乎任何类Unix的shell上执行该命令,它将类似于这样做:
cat input | ./program
因此,./program
argv
中只有一个元素,但stdin
是文件input
,所以要读取{{1}中的文件}}。请注意,这是设计程序的完美有效方法。如果没有给出文件,许多Unix程序都会从标准输入读取,这样你就可以输入其他程序的输入(或者在这种情况下,来自文件)。
答案 3 :(得分:3)
<
之后的内容不是命令行参数。该文件的内容将由shell传送到您的程序中。
您需要做的就是从标准输入读取,您将获得该文件的内容。
答案 4 :(得分:3)
你需要转义'&lt;',否则shell会解析它,程序不会在命令行中接收它。
如果你正在使用bash,那么:
./program '<' input
或
./program \< input
其他shell可能采用不同的方式(例如,Windows默认为cmd.exe
,使用^
作为转义字符,而不是\
)。
答案 5 :(得分:0)
这是一个Unix shell的东西。表单someprogram < somefile
告诉someprogram使用somefile作为输入运行。如果你想做一些涉及<
符号的不同的事情,你需要引用它。
答案 6 :(得分:0)
<
表示程序将从命名文件(输入)读取标准输入(stdin)。所以只需从标准输入读取(使用fgets
,fread
等)。
答案 7 :(得分:0)
不要'&lt;'。您希望命令行参数执行此操作:
$ ./program -Dflag seven = 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”
答案 8 :(得分:0)
实际上,这是编程锦标赛中常用的一种技术。程序所需的数据存储在一个文件中,比方说data.txt,然后使用“&lt;”重定向到您的应用程序。在shell上,像这样: ./ program&lt; data.txt中强>
因此,在您的源代码中,您需要做的是这样的事情:
#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;
}
..你将从字符串中获取文件中的所有数据(并用空格分隔)。
这是一种方法,我希望它有所帮助。 []的
答案 9 :(得分:-2)
你可以通过阅读stdin来获得它。