[英]strcmp not working and the so the program is not breaking out of the for loop even if there is a point where the two strings in strcmp become equal
[英]strcmp() doesnt return 0 even both strings are equal
我是编程新手,我的任务之一是在 c 中构建一个登录系统,其中用户名和密码存储在 .txt 文件中,.txt 文件如下所示
丹尼尔
77 天
(上面是用户名,下面是密码)
问题是当我使用 strcmp() 比较用户输入和用户名和密码的 .txt 文件中的两个字符串时,即使两个字符串相等,它也不会返回 0
#include <stdio.h)
#include <conio.h>
#include <string.h>
#include <stdlib.h>
struct login
{
char name[25];
char pass[25];
};
void login()
{
struct login acc1,acc2;
printf("input your username : ");
scanf ("%s",acc1.name);
printf("input your password : ");
scanf ("%s",acc1.pass);
FILE* fp = fopen("account.txt","r");
fgets(acc2.name,25,fp);
fgets(acc2.pass,25,fp);
if (strcmp(acc1.name,acc2.name)==0 && strcmp(acc1.pass,acc2.pass)==0)
{
printf("login successful\n");
}
else
{
printf("wrong password or username");
}
我什至尝试使用 printf 来匹配来自 userinput 和 from.txt 文件的用户名和密码,它们都是相等的。 我想知道为什么 strcmp() 不返回 0。有什么帮助吗?
如果目标数组有足够的空间,function fgets
可以 append 输入字符串与换行符'\n'
。
您需要将其删除。
例如,您可以通过以下方式执行此操作
acc2.name[ strcspn( acc2.name, "\n" ) ] = '\0';
acc2.pass[ strcspn( acc2.pass, "\n" ) ] = '\0';
在这些电话之后
fgets(acc2.name,25,fp);
fgets(acc2.pass,25,fp);
请注意,至少初始化 object acc1
的数据成员会更安全。
例如
struct login acc1 = { .name = "", .pass = "" };
struct login acc2;
并且您应该检查文件是否已成功打开并且fgets
的调用也是否成功。
阅读有关fgets
的文档,它认为新行是有效字符并将它们存储在您的字符串缓冲区中。 将字符串的长度减一以抵消它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.