我有两个名为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循环。
答案 0 :(得分:2)
您将文件名作为命令行参数传递,但未在源代码中使用。请找到以下代码以便更好地理解。
并将代码作为./main id.txt name.txt
argv[1]
和argv[2]
分别包含id.txt和name.txt。
#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];
FILE *fp1;
FILE *fp2;
if(argc==3)
{
fp1 = fopen(argv[1],"r");
fp2 = fopen(argv[2],"r");
if((fp1==NULL)||(fp2==NULL))
{
printf("one of the file is not openend");
}
while(fgets(id, sizeof id, fp1) != NULL)
{
printf("ID: %s\n",id);
}
while(fgets(name, sizeof name, fp2) != NULL)
{
printf("Name: %s\n",name);
}
}
else
{
printf("Please check command line arguments");
}
fclose(fp1);
fclose(fp2);
return 0;
}
答案 1 :(得分:1)
您可以使用file pointers
打开这两个文件,然后阅读它们。在命令行中获取文件名,然后执行此操作 -
if(argc!=3){ //check for incorrect command line arguments
printf("Not enough arguments");
return -1;
}
FILE *fp1,*fp2;
fp1=fopen(argv[1],"r"); //opening file in read mode
if(fp1==NULL) //check return of fopen
{
printf("Cannot open file %s",argv[1]);
}
fp2=fopen(argv[2],"r");
if(fp2==NULL) //similarly check for second file
{
printf("Cannot open file %s",argv[2]);
}
所以while loop
中的语句应该从不是来自stdin
的文件中读取。重写它们 -
while(fgets(id, sizeof id,fp1)!=NULL){
...
}
while(fgets(id, sizeof id,fp2)!=NULL){
...
}
还要记住最后关闭文件 -
fclose(fp1);
fclose(fp2);
答案 2 :(得分:0)
我认为最适合您的目的不是使用stdin,而是从命令行读取两个文件名:
命令行将是这个
./main id.txt name.txt
计划(为简单起见,未进行任何错误检查):
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 10
#define MAXLINELENGTH 100
int main(int argc, const char *argv[])
{
if (argc != 3)
{
fprintf(stderr, "incorrect arguments");
exit(1);
}
FILE *input;
char id[MAX];
char name[MAX];
input = fopen(argv[1], "r"); // argv[1] points to "id.txt"
while(fgets(id, sizeof id , input) != NULL)
{
printf("ID: %s\n",id);
}
fclose(input);
input = fopen(argv[2], "r"); // argv[2] points to "name.txt"
while(fgets(name, sizeof name , input) != NULL)
{
printf("Name: %s\n",name);
}
fclose(input);
return 0;
}
答案 3 :(得分:0)
检查代码以了解您的操作方法。你需要2个文件指针,2个不同的文件。如果你想“硬编码”它,将argv [1]和argv [2]更改为特定位置
FILE *fp1;
FILE *fp2;
fp1 = fopen(argv[1],"r");
fp2 = fopen(argv[2],"r");
fclose(fp1);
fclose(fp2);