6

首先让我说这与家庭作业有关。然而,这是任务中非常小且相对微不足道的部分。

C 程序通过命令行参数接收输入,但它需要采用以下形式:

$ ./program < input

怎么样,我会以字符串的形式接收该输入吗?每次我尝试从 argv 打印第三个参数时,我都会收到以下消息:

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

4

10 回答 10

21

< 是一个 shell 重定向 - 它在您的程序之外处理。您将看到文件名“输入”的内容被发送到您的标准输入流。这是程序运行的一种常见方式,尽管它们通常也处理被赋予文件名的情况,例如sed.

如果我不得不猜测,我会认为:

input: No such file or directory.

来自外壳,因为它无法打开指定的文件:“输入”。

另一方面,如果你真的想要< input程序的 as 参数,你可以转义或引用它们,这样 shell 就不会解释它们。(转义为读者的练习:-))。

于 2009-09-29T17:13:08.253 回答
10

./program < input语法是一种特殊的 shell 语法,表示“将文件中的所有内容重定向input到程序的标准条目”。

要读取输入,您的程序只需使用标准输入读取函数 linefgetsscanf.

于 2009-09-29T17:13:45.023 回答
5

在 * nix系统上,不会argv. 如果您在几乎任何类 Unix 的 shell 上执行该命令,它将类似于执行此操作:

cat input | ./program

所以你./program只有一个元素argv,但它stdin是文件input,所以要读取你刚从中读取的文件stdin。请注意,这是设计程序的一种完全有效的方法。如果没有给出文件,许多 Unix 程序会从标准输入中读取,这样您就可以通过管道输入来自其他程序(或者在这种情况下,来自文件)的输入。

于 2009-09-29T17:13:44.457 回答
3

后面的<不是命令行参数。文件的内容将通过 shell 传送到您的程序中。

您需要做的就是从标准输入读取,您将获得文件的内容。

于 2009-09-29T17:13:32.447 回答
3

您需要转义 '<',否则 shell 会解析它,并且程序不会在命令行中接收它。

如果您使用的是 bash,那么:

./program '<' input

或者

./program \< input

其他 shell 可能会以不同的方式执行此操作(例如,Windows 的默认值 ,cmd.exe用作^转义字符,而不是\)。

于 2009-09-29T17:14:28.577 回答
0

这是一个 Unix shell 的东西。该表单someprogram < somefile告诉 someprogram 使用 somefile 作为其输入来运行。如果你想做一些涉及<符号的不同的事情,你需要引用它。

于 2009-09-29T17:15:02.317 回答
0

<意味着程序将从命名文件(输入)中读取它的标准输入(stdin)。所以只需从标准输入读取(使用fgets,fread等)。

于 2009-09-29T17:15:03.037 回答
0

去掉'<'。您希望命令行参数执行以下操作:

$ ./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”

于 2009-09-29T17:25:07.383 回答
0

实际上,这是编程比赛中使用的一种非常常见的技术。您的程序需要的数据存储在一个文件中,比如说 data.txt ,然后使用 shell 上的“<”重定向到您的应用程序,如下所示:./program < 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;
}

..您将从文件中的字符串中获取所有数据(并以空格分隔)。

这是一种方法,我希望它有所帮助。[]的

于 2009-09-29T17:49:45.167 回答
-2

您可以通过阅读标准输入来获得它。

于 2009-09-29T17:14:58.450 回答