【问题标题】:How to get integer and string input using scanf?如何使用scanf获取整数和字符串输入?
【发布时间】:2020-12-05 14:15:24
【问题描述】:

我的 C 语言有问题

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

int main()
{
    char usrname[17] = "nsa-secret-agent";
    char password[9] = "marshal41";
    char usr[512], pass[512];

    printf("username: ");
    scanf("%[^\n]%*c", usr);
    printf("password: ");
    scanf("%[^\n]%*c", pass);
    printf("%s\n", usr);
    printf("%s\n", pass);

    if (strcmp(usrname, usr) == 0 && strcmp(password, pass) == 0){
        printf("You Have Successfully Logged In!\n");
    }

    else{
        printf("username or password not found!\n");
        exit(0);
    }

    return 0;
}

当我运行这段代码时,它运行时没有任何错误,但是当给出如下输入时:

username: nsa-secret-agent
password: marshal41
nsa-secret-agent
marshal41
username or password not found!

我提供了正确的凭据,但仍然显示错误

【问题讨论】:

    标签: arrays c string string-comparison


    【解决方案1】:

    usrnamepassword 的数组相差 1:

    char usrname[17] = "nsa-secret-agent";
    char password[9] = "marshal41";
    

    这些是零终止符的短一个字节,这会使以后的比较失败。要么添加一个,要么只使用

    char usrname[] = "nsa-secret-agent";
    char password[] = "marshal41";
    

    或者你甚至可以使用

    char *usrname = "nsa-secret-agent";
    char *password = "marshal41";
    

    因为字符串没有被修改。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多