繁体   English   中英

警告:初始化使 integer 来自指针而无需强制转换,即使我输入正确的用户和密码,output 也只显示其他部分

[英]warning: initialization makes integer from pointer without a cast and the output only shows else part even if I enter correct user and password

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

#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;
}

该程序要求输入用户名和密码,然后检查输入是否正确并打印合适的语句。

但是,对我来说,即使输入的数据正确,它也只显示其他部分。

在此处输入图像描述

该程序完全错误。

在这些声明中

char user = "welcome";

char pass = "hi";

您声明了您试图通过char *类型的表达式初始化的char类型的对象(用作初始值设定项的字符串文字被隐式转换为指向其第一个元素的指针)。

相反,您需要声明字符 arrays,您将在其中读取用户名和他的密码。

例如

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 ){

要使用 function strcmp ,您需要包含 header <string.h>

#include <string.h>

像这样声明用户名和密码字段:

char user[1024], pass[1024];

目前他们只能容纳一个角色。 您可以将 1024 更改为您假设用户输入的最大字符数。 您还应该记住,字符串不能与user=="welcome"进行比较! 请改用string.h中的strcmp function。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM