1

我正在 Linux 上用 C 语言编写程序,我想让用户指定要从终端打开的文本文件。所以用户输入:

./program < nums.txt

该程序将读取该 .txt 文件中的内容。目前,我使用以下代码指定要自己打开的文件名:

fp = fopen("nums.txt","r");

请注意,nums.txt 仅包含两个数字,由空格分隔,用于最小值和最大值。

我只是在学习 C 并且不确定如何去做。我搜索了 Stack Overflow 并使用了搜索引擎,但仍然无法解决这个问题。

谢谢。

4

2 回答 2

1

它可能有助于理解 shell 输入重定向是如何工作的。

对于您提供的命令行,shell 将打开文件并将其连接到进程的标准输入。C 已经有一个标准输入流,所以你可以像这样使用它,fopen不需要:

fp = stdin;

另一方面,如果您希望用户像这样运行您的程序:

./program nums.txt

然后您将要使用函数的argcandargv参数main,例如:

int main(int argc, char **argv)
{
    if (argc < 2)
        return 1;

    FILE *fp = fopen(argv[1], "r");

...

argc变量包含传递的参数数量,并且argv是一个数组,每个参数都是一个字符串。用于调用程序的名称通常是第一个元素 ( argv[0]),这就是我使用argv[1]. 而且,与使用数组时一样,请确保不要尝试访问末尾。

于 2013-09-16T20:17:59.043 回答
0

以下是如何读取标准输入的第一个字符(用作./program <nums.txt):

#include <stdio.h>
int main(int argc, char **argv) {
  FILE *f = stdin;
  int c = getc(f);
  /* int c = getchar();  -- Same as above. */
  if (c >= 0) printf("%c\n", c);
  return 0;
}

以下是如何读取命令行中指定的文件的第一个字符(用作./program nums.txt):

#include <stdio.h>
int main(int argc, char **argv) {
  FILE *f = fopen(argv[1], "r");
  /* TODO: Handle f == NULL. */
  int c = getc(f);
  if (c >= 0) printf("%c\n", c);
  return 0;
}
于 2013-09-16T20:18:38.640 回答