C语言 警告:初始化从指针生成整数而不进行强制转换,即使输入正确的用户名和密码,输出也只显示else部分

vsdwdz23  于 2023-02-03  发布在  其他
关注(0)|答案(2)|浏览(122)
#include<stdio.h>
int main(){
    char user = "welcome";
    printf("Enter UserName \n");
    scanf("%s",&user);

    char pass = "hi";
    printf("Enter Password: \n");
    scanf("%s",&pass);

    if(user=="welcome" && pass == "hi"){
            printf("Login Successful");
    }
    else{
        printf("Retry");
    }
    return 0;
}

此程序要求输入用户名和密码,然后检查是否输入正确,并打印适当的声明。
然而,对我来说,它只显示其他部分,即使输入的数据是正确的。
enter image description here

bis0qfac

bis0qfac1#

这个程序完全错了。
在这些声明中

char user = "welcome";

以及

char pass = "hi";

你声明了char类型的对象,你试图用char *类型的表达式初始化这些对象(用作初始化器的字符串常量隐式转换为指向它们的第一个元素的指针)。
相反,您需要声明字符数组,从中读取用户名和密码。
例如

char user[10];
char pass[10];

scanf的调用可以如下所示

scanf("%9s", user);
scanf("%9s", pass);

在此if语句中

if(user=="welcome" && pass == "hi"){

你正在比较指针。相反,你需要比较字符串,比如

if( strcmp( user, "welcome" ) == 0 && strcmp( pass, "hi" ) == 0 ){

要使用函数strcmp,您需要包含标头<string.h>

#include <string.h>
n6lpvg4x

n6lpvg4x2#

如下声明用户名和密码字段:

char user[1024], pass[1024];

当前它们只能容纳单个字符。您可以将1024更改为您认为用户将输入的最大字符数。您还应该记住字符串不能与user=="welcome"进行比较!请使用string.h中的strcmp函数。

相关问题