void registers()
{
struct waterUser z[N];
struct waterUser a[N];
FILE *fp,*fp1;
int sleep[1000],i=0,t;
char p;
printf("欢迎来到注册界面!\n");
sleep[1000];
fp=fopen("shuifei.txt","r");
fread(&a[N],sizeof(a[N].id),1,fp);
printf("请输入账号\n");
scanf("%d",&t);
do{
if(t==a[i].id)
{printf("账号正确\n");
break;}
i++;
}while(i>=N);
fclose(fp);
fp1=fopen("users.txt","wb");
printf("请输入密码\n");
scanf("%s",&p);
fprintf(fp1,"%s",p);
system("pause");
printf("请牢记密码\n");
fclose(fp1);
}
`
t==a[i].id
printf("账号正确\n");看不出有没有比较
printf("请牢记密码\n");此步显示不出来
代码可以进行下述修改:
修改后的代码如下:
#include <stdio.h>
#include <stdlib.h>
#define N 1000
struct waterUser {
int id;
};
void registers() {
struct waterUser z[N];
struct waterUser a[N];
FILE *fp, *fp1;
int sleep[1000], i = 0, t;
char p[100];
printf("欢迎来到注册界面!\n");
sleep[1000];
fp = fopen("shuifei.txt", "r");
fread(&a[N], sizeof(a[N].id), 1, fp);
printf("请输入账号: ");
scanf("%d", &t);
for (i = 0; i < N; i++) {
if (t == a[i].id) {
printf("账号正确\n");
break;
}
}
if (i == N) {
printf("账号不存在\n");
}
fclose(fp);
printf("请输入密码: ");
scanf("%s", p);
fp1 = fopen("users.txt", "wb");
fprintf(fp1, "%s", p);
printf("请牢记密码: %s\n", p);
fclose(fp1);
system("pause");
}
这个是因为使用fread的方法不适合有关系,因为文本文件如果手动输入账号,则使用fread以%d的方式来读取会出现错误的结果,改为fscanf()读取可能更适合一点;
另外如果匹配到了账户之后写入的密码,与账户对应起来也是一个需要考虑的问题,暂时以直接写入密码来实现。
修改如下:
参考链接:
#include <stdio.h>
#include <stdlib.h>
#define N 100
struct waterUser{
int id;
};
void registers()
{
struct waterUser z[N];
struct waterUser a[N];
FILE *fp,*fp1;
int sleep[1000],i=0,t;
char p[20]; // 存储密码的变量p改为字符数组,以存储多个字符的密码
printf("欢迎来到注册界面!\n");
sleep[1000];
fp=fopen("shuifei.txt","r");
int j=0,id;
while(feof(fp)==0){
// https://baike.baidu.com/item/fscanf/10942374?fr=aladdin
int num=fscanf(fp,"%d",&id); // 每次读取一个整数类型的账号到临时变量id中
if(num!=EOF){ // 如果争取读到,则把此账号存入水费账户结构数组元素的账户id字段
a[j].id = id;
// printf("a[%d].id=%d\n",j,a[j].id);
j++;
}
}
fclose(fp);
printf("请输入账号\n");
scanf("%d",&t);
int findUser=0; // 是否找到账户的标志
do{
if(t==a[i].id)
{
findUser=1; // 如果在读取的账号中找到此账号id,则标志置1
printf("账号正确\n");
break;
}
i++;
}while(i<j);
if(findUser==1){ // 如果找到账号,则进行密码设置
fp1=fopen("users.txt","w");
printf("请输入密码\n");
scanf("%s",p);
fprintf(fp1,"%s",p);
system("pause");
printf("请牢记密码\n");
fclose(fp1);
}else{ //如果没有找到,则打印提示,然后退出程序
printf("没有找到账号,程序退出!\n");
return ;
}
}
int main(void){
registers();
return 0;
}
shuifei.txt(测试文件内容):
111
222
333