gpt4 book ai didi

c - 某些逻辑错误总是执行 if block ?

转载 作者:行者123 更新时间:2023-11-30 18:24:28 26 4
gpt4 key购买 nike

#include<stdio.h>
#include<string.h>
char Sys_Pass[]="3699";
char verify_Pass(char *P,char *Q)
{
char ch;
ch=strcmp(P,Q);
printf("String Cmp %s,%s is %c %d\n",P,Q,ch,ch);
if(ch==0)
return 1;
else
return 0;
}
void main()
{
char Pass[10],New[10];
char fp=0,sp=0;
printf("Enter Password : ");
scanf("%s",Pass);
if(fp=verify_Pass(Pass,Sys_Pass))
{
Change: printf("Enter a New Password : ");
scanf("%s",Pass);
printf("Re-Type New Password : ");
scanf("%s",New);
if(sp=verify_Pass(Pass,New))
{
strcpy(Sys_Pass,New);
printf("Password Successfully changed\n");
printf("New Password : %s\n",Sys_Pass);

}
else
printf("Passwords Mismatch\n");
}
else
{
if(strcmp(Pass,"111999")==0);
goto Change;
printf("Wrong Password !!!\n");
}
printf("Fp : %c %d\nSp : %c %d\n",fp,fp,sp,sp);
}

此代码始终执行 if block 并提供密码更改,即使输入了错误的当前密码我想知道是否存在逻辑错误(如果有)?

我正在开发一个 8051 项目,我想建立一个 secret 密码更改,即如果我忘记了密码并且我输入密码为 111999,它应该引导我进入密码更改菜单,但这里它总是指示更改密码菜单。这实际上是嵌入的 C 代码,但我尝试使用 C 代码来纠正它,但在两种情况下都会产生相同的输出。

最佳答案

你有一个杂散的分号:

         // here ---------------v
if(strcmp(Pass,"111999")==0);
goto Change;

顺便说一句,这不是 goto 的好用。更好的做法是在 if 条件中检查当前密码或 111999。

printf("Enter Password : ");
scanf("%s",Pass);
if ((strcmp(Pass,"111999")==0) || (strcmp(Pass,Sys_Pass)==0))
{
printf("Enter a New Password : ");
...
}
else
{
printf("Wrong Password !!!\n");
}

关于c - 某些逻辑错误总是执行 if block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com