我在Linux上用C编写程序,我想让用户指定一个从终端打开的文本文件。所以用户输入:
./program < nums.txt
程序将读取该.txt文件中的内容。目前,我使用以下代码指定要自行打开的文件名:
fp = fopen("nums.txt","r");
请注意,nums.txt只包含两个用空格分隔的数字,用于最小值和最大值。
我只是在学习C而且不确定如何去做。我搜索过Stack Overflow并使用了搜索引擎,但仍然无法解决这个问题。
感谢。
答案 0 :(得分:1)
了解shell输入重定向的工作原理可能会有所帮助。
对于您提供的命令行,shell将打开文件并将其连接到进程的标准输入。 C已经有一个标准输入流,所以你可以像这样使用它,不需要fopen
:
fp = stdin;
另一方面,如果您希望用户像这样运行您的程序:
./program nums.txt
然后,您将要使用argc
函数的argv
和main
参数,例如:
int main(int argc, char **argv)
{
if (argc < 2)
return 1;
FILE *fp = fopen(argv[1], "r");
...
argc
变量包含传递的参数数量,argv
是一个数组,每个参数都作为字符串。用于调用程序的名称通常是第一个元素(argv[0]
),这就是我使用argv[1]
的原因。并且,与使用数组时一样,请确保您不要尝试访问结束。
答案 1 :(得分: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;
}