【发布时间】:2018-07-18 04:24:50
【问题描述】:
我必须编写一个 c 程序,从两个不同的文件中复制用户名和密码,并将它们匹配到第三个文件中。我真的不知道如何解决这个问题。 username.txt 和 password.txt 中都有 20 个元素。我知道我可以使用 fread 和 fwrite 从文本文件中一次读取信息块。我尝试运行该程序,但它给了我无法打开文件的错误。我该如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#define BUFF_SIZE 1000
int main()
{
FILE *usernames, *passwords, *merged_file;
char a, c;
passwords = fopen("/Users/mcicco/Desktop/passwords.txt", "r");
usernames = fopen("/Users/mcicco/Desktop/usernames.txt ", "r");
merged_file = fopen("/Users/mcicco/Desktop/merged.txt" , "w");
if (usernames == NULL || passwords ==NULL)
{
printf("Cannot open file \n");
return (-1);
}
c = fgetc(usernames);
a = fgetc(passwords);
while (c != EOF && a!= EOF)
{
fputc(c, merged_file);
c = fgetc(usernames);
fputc(a, merged_file);
a=fgetc(passwords);
}
fclose(usernames);
fclose(passwords);
fclose(merged_file);
return 0;
}
【问题讨论】:
-
请注意这里没有使用
BUFF_SIZE,因此您可能根本没有分配缓冲区。除了微不足道的数据量之外,逐个字符地读取将非常缓慢。 -
您可能应该从两个输入文件中读取 lines,然后将它们合并到输出文件中。
-
简单的解释是文件名错误/拼写错误,或者文件不存在。
-
分别对每个
fopen调用进行错误检查,并使用perror而不是printf来打印错误消息。这会告诉你为什么调用失败(以及哪一个)。 -
我发现了问题,fopen函数中有多余的空间。但是,文本文件没有被合并。