所以我想做一个登录脚本,我已经对它进行了编码,但是当我运行它时,它总是显示“错误的用户名”,即使它是正确的。
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#define MYNAME "SLITHER" //Defines SLITHER so u can put %s yo use it
#define HackerNum 1338
/*
Welcome To slithers Program
I will be coding what ever I like
c:
*/
void LoginScript ();
char RealUsername[20] = "slither";
char UsersInput[30];
int main ()
{
printf("Welcome To /bin V1");
printf("\n Made By slither!\n");
LoginScript ();
}
void LoginScript ()
{
printf("Please Login\n");
printf("Username: ");
scanf("%s",&UsersInput);
//printf("You Entered %s", UsersInput); This says what you printed
if (UsersInput == RealUsername)
{
printf("Logged in");
}
else
{
printf("Wrong Username");
}
}发布于 2015-12-26 23:18:33
由于类型不匹配,
scanf("%s",&UsersInput);是未定义的行为(预期为char*,got char (*)[30])UsersInput == RealUsername是指针的比较,而不是字符串内容的比较。strcmp()对于比较字符串很有用。在代码开头添加#include <string.h>,并尝试如下所示:
void LoginScript ()
{
printf("Please Login\n");
printf("Username: ");
scanf("%29s",UsersInput); // add 29 (maximum length to read) to avoid buffer overrun
//printf("You Entered %s", UsersInput); This says what you printed
if (strcmp(UsersInput, RealUsername) == 0)
{
printf("Logged in");
}
else
{
printf("Wrong Username");
}
}发布于 2015-12-26 23:16:35
它总是显示“错误的用户名”,即使它是正确的。
是的,这就是它应该做的。在代码中,
if (UsersInput == RealUsername)是错误的。这是,而不是,你应该如何比较字符串。这条语句实际上试图比较指针本身,而不是它们包含的“字符串”。这就是为什么你的if检查不能像他们想的那样工作。
为此,您需要使用strcmp() (在string.h中原型化),例如
if ( !strcmp(UsersInput, RealUsername) )
{
printf("Logged in\n");
}
else
{
printf("Wrong Username\n");
}话虽如此,
为了避免在定义数组时通过较长的inputs.
int main ()应为int main (void)以符合scanf("%29s",UsersInput);。char RealUsername =“滑行”;
被认为比
char RealUsername20 =“滑行”;
有时,它省去了忘记终止空字符大小的计数的麻烦。
发布于 2015-12-26 23:34:18
包括@sourav在内的许多其他人都给出了使用strcmp的解决方案。
我想指出为什么它总是给出“错误的用户名”作为输出。
原因在于比较语句本身。
if (UsersInput== RealUsername )
{
printf("Logged in");
}我们在这里不是比较字符串,而是比较它们的地址和它们的地址将始终不同,结果将始终是“.Hence "
https://stackoverflow.com/questions/34472592
复制相似问题