提问人:user123 提问时间:2/1/2023 最后编辑:Vlad from Moscowuser123 更新时间:2/1/2023 访问量:101
警告:初始化使指针整数而不强制转换,即使我输入了正确的用户和密码,输出也只显示其他部分
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;
}
该程序要求输入用户名和密码,然后检查输入是否正确并打印合适的语句。
但是,对我来说,即使输入的数据正确,它也只显示其他部分。
答:
1赞
Oreoezi
2/1/2023
#1
声明用户名和密码字段,如下所示:
char user[1024], pass[1024];
目前,它们只能容纳一个字符。您可以将 1024 更改为您假定用户将输入的最大字符数。您还应该记住,字符串不能与 !请改用里面的函数。user=="welcome"
strcmp
string.h
评论
2赞
ryyker
2/1/2023
这些是声明,但都未初始化。初始化可以采用多种形式,例如 或...char user[1024] = {0}, pass[1024] = {0};
char user[1024] = "welcome", pass[1024] = "hi";
1赞
Oreoezi
2/1/2023
@ryyker是的,我不好混淆这些术语。@Haris你误会了。我所说的“当前”是指 OP 尝试执行的当前代码 ()。char user = "welcome";
0赞
Harith
2/1/2023
@Oreoezi我收回了我的话。:)
1赞
ryyker
2/1/2023
如有必要,我们鼓励您编辑您的帖子,以便在发现问题时发表评论。这通常会改善您的答案。
3赞
Vlad from Moscow
2/1/2023
#2
该程序是完全错误的。
在这些声明中
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>
评论
scanf("%s",&user);
&user
char
-Wall -Wextra -Werror
-Wmissing-prototypes -Wstrict-prototypes -Wold-style-declaration -Wold-style-definition