gpt4 book ai didi

c - 简单的 C 登录表单问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:49 24 4
gpt4 key购买 nike

我想使用包含用户的文本文件执行简单的 C 登录表单。这个想法是输入一个用户名,对照文件中的每个用户名进行检查,并不断提示输入新用户名,直到登录成功。文本文件每一行有一个用户。

我的问题是,如果我输入第一行以外的任何其他用户,我会收到“登录失败”消息。另外,如果我尝试输入另一个用户名,它总是会匹配失败。

#include <stdio.h>
#include <string.h>

int main(){
char loginBuffer[10];
char testuser1[10];
char testuser2[10];
printf("Please provide your username for login\n");
scanf("%s", testuser1);
FILE *loginFile;
loginFile = fopen("users.txt","r");
if(!loginFile){
printf("Could not open file");
return 1;
}
while(fgets(loginBuffer, 7, loginFile) != NULL){
strcpy(testuser2,loginBuffer);
if(strcmp(testuser2, strcat(testuser1,"\n")) == 0){
printf("Login successful, welcome %s \n",testuser1);
break;
}
else{
printf("Login Failed please provide another username\n");
scanf(" %s", testuser1);
}

}


}

最佳答案

对所有输入使用 fgets 并避免添加或删除尾随换行符。
使用标志指示是否找到匹配项。
如果未找到匹配项,则在搜索循环外打印错误。
如果未找到匹配项,则倒回文件并请求其他用户。

#include <stdio.h>
#include <string.h>

int main(){
char loginBuffer[10];
char testuser1[10];
int found = 0;
FILE *loginFile;
loginFile = fopen("users.txt","r");
if(!loginFile){
printf("Could not open file");
return 1;
}
do {
printf("Please provide your username for login\n");
if ( fgets(testuser1, sizeof testuser1, stdin)) {
found = 0;
do {
if(fgets(loginBuffer, sizeof loginBuffer, loginFile)){
if(strcmp(loginBuffer, testuser1) == 0){
printf("Login successful, welcome %s \n",testuser1);
found = 1;
}
}
else {
break;
}
} while ( !found);
if ( !found) {
printf("Login Failed please provide another username\n");
rewind ( loginFile);
}
}
else {
fprintf ( stderr, "fgets stdin EOF\n");
fclose ( loginFile);
return 0;
}
} while ( !found);
fclose ( loginFile);

}

关于c - 简单的 C 登录表单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com