
试了很多次,文件真实存在,输入的密码和账户也都正确的,可还是说我输入错误,希望帮忙解答一下我是语法哪里错了吗

关注引自免费微信小程序:皆我百晓生
从你提供的代码片段来看,确实存在一些问题。首先,代码片段并不完整,缺少了关键的逻辑部分,比如读取文件中的数据与用户输入进行比较的部分。不过,根据你描述的问题,我们可以逐步分析并修改代码。
在打开文件时,你使用了 "注册信息记录,txt","rb" 这样的格式,这会导致编译器报错。正确的方式是将文件名和模式放在双引号内,且不应有逗号分隔。
确保文件路径正确,并且使用二进制模式 "rb" 或文本模式 "r" 打开文件,取决于文件内容。
scanf_s 的使用scanf_s 是一个安全版本的 scanf,在 Visual Studio 等环境中使用,它需要额外的参数来限制字符串的长度。但在这个上下文中,你可能不需要这个函数,标准的 scanf 就可以。
代码中有些逻辑似乎没有正确实现,例如,userId 的赋值和循环条件等。
下面是一个修改后的代码示例,用于登录功能:
#include <stdio.h>
#include <string.h>
#define MAX_USERS 100
#define MAX_CARD_LEN 10
#define MAX_PASSWORD_LEN 10
struct User {
char cardNumber[MAX_CARD_LEN];
char password[MAX_PASSWORD_LEN];
} users[MAX_USERS];
int main() {
FILE *fp;
fp = fopen("注册信息记录.txt", "r");
if (fp == NULL) {
printf("文件打不开,无法登入!\n");
return 1;
}
int userCount = 0;
while (fscanf(fp, "%s %s", users[userCount].cardNumber, users[userCount].password) == 2) {
userCount++;
}
fclose(fp);
char cardNumber[MAX_CARD_LEN];
char password[MAX_PASSWORD_LEN];
int attempts = 0;
while (attempts < 3) {
printf("请输入卡号(最多9位数字):");
scanf("%9s", cardNumber);
printf("请输入密码(最多9位):");
scanf("%9s", password);
int userId = -1;
for (int i = 0; i < userCount; i++) {
if (strcmp(users[i].cardNumber, cardNumber) == 0 && strcmp(users[i].password, password) == 0) {
userId = i;
break;
}
}
if (userId != -1) {
printf("登录成功!\n");
return 0;
} else {
attempts++;
printf("卡号或密码错误,请重试(剩余尝试次数:%d)\n", 3 - attempts);
}
}
printf("尝试次数过多,登录失败。\n");
return 1;
}
这段代码首先从文件中读取用户信息,然后让用户输入卡号和密码,并与文件中的信息进行比对。如果匹配,则登录成功;否则,允许用户重试,直到尝试次数用完。
fscanf 和 strcmp 来处理文件读取和字符串比较,这些函数需要包含 <stdio.h> 和 <string.h> 头文件。