让我说,这是一个家庭作业相关的开始。然而,这是分配的一个非常小的,相对不重要的部分。

在C程序通过命令行参数接收输入,但它需要在格式:

$ ./program < input

我会怎样,去接收输入的字符串?每次我尝试打印出从argv的所述第三参数我收到此消息:

  

输入:没有这样的文件或目录

有帮助吗?

解决方案

<是壳重定向 - 它是你的程序之外处理。您将看到的是文件名“输入”的内容被发送到你的标准输入流。这是程序操作的常用方式,虽然他们通常也被处理给文件名如sed

如果我猜我会想:

input: No such file or directory.

从壳体来,因为它是无法打开指定的文件:“输入”

在另一方面,如果你真的想< input作为参数传递给你的程序,你可以逃跑或引用他们,使外壳不会解释它们。 (逸出留给读者作为练习读者: - )。)

其他提示

./program < input语法是一种特殊的shell语法说“命名重新导向至input程序的标准条目文件中的一切。”

要读出的输入,程序只需要使用标准输入读取功能,线路fgetsscanf

在* 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)从指定的文件(输入)。因此,只要(使用fgetsfread等)从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;
}

..,你会得到一个字符串从文件中的所有数据(并用空格隔开)。

这是应该做的一种方式,我希望它能帮助。 []的

您可以通过读取标准输入得到它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top