将用户名和密码从文件复制到C中的另一个文件

时间:2018-02-07 18:53:35

标签: c file text

我必须编写一个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;
}

2 个答案:

答案 0 :(得分:0)

一次读取一个字符的文件太慢了。只需一次读一行,一次写一行或两行:

all: test1.o test2.o
.PHONY: all

答案 1 :(得分:0)

以下提议的代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 使用fgets()快速阅读两个输入文件的每一行
  4. 使用strchr()查找输入缓冲区中的任何换行符
  5. 使用简单的赋值来替换任何带有NUL字节的换行符
  6. 正确检查对fopen()
  7. 的调用的错误 如果对fopen()的任何调用失败,
  8. 会正确清理
  9. 使用#define BUFF_SIZE
  10. 考虑了对问题的评论。
  11. 记录每个头文件包含的原因
  12. 遵循公理:每行只有一个语句,并且(最多)每个语句一个变量声明。
  13. 通过分隔代码块(for if else while do...while switch case {来鼓励提高易读性和理解力{1}}通过一个空行
  14. 假设两个输入文件包含相同的行数
  15. 假设对于包含用户名的行,另一个文件中的同一行包含密码
  16. 假设输出文件的所需内容为:default
  17. 现在,建议的代码。

    username password