题
让我说,这是一个家庭作业相关的开始。然而,这是分配的一个非常小的,相对不重要的部分。
在C程序通过命令行参数接收输入,但它需要在格式:
$ ./program < input
我会怎样,去接收输入的字符串?每次我尝试打印出从argv的所述第三参数我收到此消息:
输入:没有这样的文件或目录
解决方案
<是壳重定向 - 它是你的程序之外处理。您将看到的是文件名“输入”的内容被发送到你的标准输入流。这是程序操作的常用方式,虽然他们通常也被处理给文件名如sed
。
如果我猜我会想:
input: No such file or directory.
从壳体来,因为它是无法打开指定的文件:“输入”
在另一方面,如果你真的想< input
作为参数传递给你的程序,你可以逃跑或引用他们,使外壳不会解释它们。 (逸出留给读者作为练习读者: - )。)
其他提示
在./program < input
语法是一种特殊的shell语法说“命名重新导向至input
程序的标准条目文件中的一切。”
要读出的输入,程序只需要使用标准输入读取功能,线路fgets
或scanf
。
在* nix系统,不会有是 argv
的第三元件。如果您在几乎所有的类Unix Shell执行该命令,这将是类似这样:
cat input | ./program
所以,你./program
中只有一个argv
元素,但它的stdin
是文件input
,所以读你只是从stdin
读取文件。请注意,这是设计程序完全有效的方式。从标准输入读取许多Unix程序如果没有文件被给出,这样就可以在管从其他程序输入(或在这种情况下,从文件)。
什么而来的<
后不是命令行参数。该文件的内容将被壳通过管道输送到程序中。
所有你需要做的是从标准输入读,你会得到该文件的内容。
您需要躲避“<”,否则壳将解析它,程序将不会收到它在命令行。
如果你正在使用bash,那么:
./program '<' input
或
./program \< input
其他炮弹可能会采取不同的方式(例如Windows的默认,cmd.exe
,使用^
为转义字符,而不是\
)。
这是一个Unix外壳的事情。形式someprogram < somefile
告诉someprogram使用somefile作为其输入运行。如果你想要做不同的事情涉及<
符号,你需要引用它。
在<
意味着程序将读取它的标准输入(stdin)从指定的文件(输入)。因此,只要(使用fgets
,fread
等)从stdin读取。
保留断 '<'。你想命令行参数做到这一点:
$ ./program -Dflag 7 = 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”
实际上,这是在编程比赛中使用的非常常用的技术。你的程序需要被存储在一个文件中的数据,让我们说的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;
}
..,你会得到一个字符串从文件中的所有数据(并用空格隔开)。
这是应该做的一种方式,我希望它能帮助。 []的
您可以通过读取标准输入得到它。