简单的C登录表单问题

时间:2018-11-01 17:10:44

标签: c

我想使用包含用户的文本文件执行简单的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);
        }

    }


}

2 个答案:

答案 0 :(得分:3)

使用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);

}

答案 1 :(得分:0)

尝试一下:

if(strcmp(testuser2, strcat(testuser1,"\n")) == 0)行上按if(strcmp(testuser2, strcat(testuser1,"\n")))进行更改。

将比较值删除为0,因为如果strcmp返回0,并且满足条件(如果为1),则满足条件。

对我有用