对于我的代码,我需要创建一个包含用户名(名字)和密码(姓氏)的.txt文件。我的代码需要读取该文件。如果我输入了正确的用户名和密码,它将登录。如果不正确,则不会登录。到目前为止,在我的name.txt文件中(包含我的用户名和密码的文件)我有
勒布朗詹姆斯 乔史密斯 尼克戴维斯
如果我的用户名和密码正确,我希望它允许我登录。 当我运行我的代码时,我遇到了一个突发错误。我似乎无法在我的代码算法中找到问题。
//This is my code:
#include <stdio.h>
#include <stdlib.h>
struct account {
char id[20];
char password[20];
};
static struct account accounts[10];
void read_file(struct account accounts[])
{
FILE *fp;
int i = 0; // count how many lines are in the file
int c;
fp = fopen("names.txt", "r");
while (!feof(fp)) {
c = fgetc(fp);
if (c == '\n')
++i;
}
int j = 0;
// read each line and put into accounts
while (j != i - 1) {
fscanf(fp, "%s %s", accounts[j].id, accounts[j].password);
++j;
}
}
int main()
{
read_file(accounts);
// check if it works or not
printf("%s, %s, %s, %s\n",
accounts[0].id, accounts[0].password,
accounts[1].id, accounts[1].password);
return 0;
}
答案 0 :(得分:1)
您不需要提前知道行数。只需使用fscanf()
读取一对名称和密码,直到它返回EOF
。
while (fscanf(fp, "%s %s", accounts[j].id, accounts[j].password) != EOF) {
++j;
}
另外,请勿使用feof()
。它通常不会按照您的预期运作。 feof()
仅在程序尝试读取文件并失败后才返回true值。也就是说,它不会阻止你的循环尝试读取文件的末尾。