我是 C 语言的中级学生。我正在尝试制作一个银行管理程序,但首先我需要制作一个登录程序,所以我创建了以下程序之一。由于我最近了解了C中的文件I/O,并且对fread和fwrite不太了解。我有一个文件(data.txt),其格式如下。
用户1 1124
用户2 3215
用户3 5431
在下面的程序中,我要求用户输入用户名和 pin(4 位密码)并将文件数据复制到结构中,然后比较这两者以验证信息。
我的程序有什么问题以及如何使 fread 正常工作。 data.txt 文件中的格式是否正确,或者我应该更改它。
提前致谢...
#include<stdio.h>
#include<ctype.h>
#include<string.h>
struct user_account {
char u_name[30];
int u_pin;
} log_in;
int login()
{
int start;
int i, n;
int t_pin[4]; // TEMPORARY INT PIN for storing pin inputed by user
char t_name[30]; // TEMPORARY STRING for storing name inputed by user
FILE *fp;
fp = fopen("data.txt","rb"); // Opening record file
if(fp == NULL)
{
puts("Unable to open file!");
return 1;
}
start : {
printf("User Name : ");
scanf("%s",&t_name);
printf("Pin Code : ");
for(i = 0; i < 4; i++) { // This loop is for hiding input pin
n = getch();
if(isdigit(n)) {
t_pin[i] = n;
printf("*"); }
else {
printf("\b");
i--;
}
}
fread(&log_in,sizeof(log_in),1,fp);
// Comparing user name and pin with info in the structure copied from the file
if(strcmp(log_in.u_name, t_name) == 0 && log_in.u_pin == t_pin)
puts("Login successful! Welcome User");
else {
printf("\nIncorrect Information!\n");
printf("Press any key to log in again...");
getch();
system("cls");
goto start; }
}
}
int main()
{
int login();
return 0;
}
问题是您有一个 ASCII/文本文件,但您正在尝试使用fread
直接读入结构;这需要一个二进制格式的文件。fread
无法进行格式转换。使用fscanf
反而:
fscanf(fp, "%s %d", &log_in.u_name, &log_in.u_pin);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)