【发布时间】:2015-08-28 06:36:10
【问题描述】:
我有两个名为 id.txt 和 name.txt 的文件。
id和name的内容分别是:
12345
23456
34567
45678
56789
67890
abcde
bcdef
cdefg
defgh
efghi
fghij
问题是我必须从命令行读取输入并将其存储在一个数组中
这是我的主要代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 10
int main(int argc, const char *argv[])
{
char id[MAX];
char name[MAX];
while(fgets(id, sizeof id, stdin) != NULL)
{
printf("ID: %s\n",id);
}
while(fgets(name, sizeof name, stdin) != NULL)
{
printf("Name: %s\n",name);
}
return 0;
}
最后一点是我必须在命令行中重定向输入文件。
所以到目前为止我的命令行参数是:
gcc -Wall -ansi -o main main.c
./main < id.txt name.txt
输出是:
12345
23456
34567
45678
56789
67890
据我从 fgets() 了解到的是,当它到达文件末尾时,它将返回 null。因此,在读取第一个文件后,第一个 while 循环会停止,然后转到第二个 while 循环。
【问题讨论】:
-
您在代码中使用 argv 的位置?
-
我是否使用 argv 作为文件输入?
-
shell 重定向来自
id.txt的标准输入并将字符串name.txt作为参数传递给您的程序。您要么需要打开以argv[1]命名的文件,要么需要重新考虑您在做什么。传递两个文件名(如argv[1]和argv[2],使用argc == 3)并打开(和关闭)这两个文件可能会更简洁。请注意,第二个循环中的fgets()立即返回 EOF,因为第一个循环也检测到 EOF,并且您没有使用clearerr(stdin)清除“错误”(EOF) 条件。但是,即使您清除了错误,您的代码也会立即获得另一个 EOF。 -
您只是在传递文件名,但根本没有使用,您需要打开您正在传递的文件,然后根据您尝试读取 ID 和 NAME 的当前代码使用该文件描述符读取来自控制台的输入。
-
顺便说一下,您显示的输出不是您显示的程序的输出;你错过了每一行的
ID:标签。