如何在C编程中检查输入是否等于预设值?

如何在C编程中检查输入是否等于预设值?,c,codeblocks,C,Codeblocks,我正在写一个程序,你可以让别人登录。但当我输入的id和密码等于预设值时,我无法使其成功打印登录 int main() { int id,pass,idC=0,passC=0,i,myid,mypass,tries=1; myid = 10082612; password = 123456; printf("**LOG IN**\n\n"); printf("ID: "); scanf("%d", &id); printf("Password: "); scanf("%d

我正在写一个程序,你可以让别人登录。但当我输入的id和密码等于预设值时,我无法使其成功打印登录

int main()
{
 int id,pass,idC=0,passC=0,i,myid,mypass,tries=1;
 myid = 10082612;
 password = 123456;

 printf("**LOG IN**\n\n");
 printf("ID: ");
 scanf("%d", &id);
 printf("Password: ");
 scanf("%d", &pass);

 while(id != 0){
    id /= 10;
    idC++;
 }

 while(pass!= 0){
    pass /= 10;
    passC++;
 }

 if(idC==8 && passC ==6 || idC==7 && passC==6){
    if(id==myid && pass==mypass){
        printf("Successfully Login");
    }
    else{
        printf("Unknown ID");
    }
 }
 else if(idC!=8 && passC==6 || idC!=7 && passC==6){
    printf("The Student ID should be in 7 or 8 digits, please try again");
 }
 else if(idC==8 && passC!=6 || idC==7 && passC!=6){
    printf("Please enter a 6-digit pin");
 }


}

这就是我写的。

这是因为您正在丢失
id
pass
的原始值,原因是:

while(id != 0){
    id /= 10; //THIS PART
    idC++;
 }

 while(pass!= 0){
    pass /= 10; // AND THIS PART
    passC++;
 }
要避免这种情况,您可以:

int idCopy = id;
int passCopy = pass;
 //and then do

 while(idCopy != 0){
    idCopy /= 10;
    idC++;
 }

 while(passCopy!= 0){
    passCopy /= 10;
    passC++;
 }

//and use the original values of id and pass like in your code .

您应该将idC和passC初始化为1,因为对于8位数字,循环仅为真7次,以此类推

int idC = 1,passC = 1;

检查下面的代码。在代码中,您正在更新id和pass值。这就是您无法成功登录的原因

#include <stdio.h>

int main()
{
 int id,pass,idC=0,passC=0,i,myid,mypass,tries=1;
 myid = 12345678;
 int password = 123456;

 printf("**LOG IN**\n\n");
 printf("ID: ");
 scanf("%d", &id);
 printf("Password: ");
 scanf("%d", &pass);
 int temp=id;
 while(temp != 0){
    temp /= 10;
    idC++;
 }
temp=pass;
 while(temp!= 0){
    temp /= 10;
    passC++;
 }

 if(idC==8 && passC ==6 || idC==7 && passC==6){
    if(id==myid && pass==password){
        printf("Successfully Login");
    }
    else{
        printf("Unknown ID");
    }
 }
 else if(idC!=8 && passC==6 || idC!=7 && passC==6){
    printf("The Student ID should be in 7 or 8 digits, please try again");
 }
 else if(idC==8 && passC!=6 || idC==7 && passC!=6){
    printf("Please enter a 6-digit pin");
 }


}
#包括
int main()
{
int-id,pass,idC=0,passC=0,i,myid,mypass,trys=1;
myid=12345678;
int密码=123456;
printf(“**登录**\n\n”);
printf(“ID:”);
scanf(“%d”和&id);
printf(“密码:”);
scanf(“%d”和“通过”);
int temp=id;
while(温度!=0){
温度/=10;
idC++;
}
温度=通过;
while(温度!=0){
温度/=10;
passC++;
}
如果(idC==8&&passC==6 | | idC==7&&passC==6){
if(id==myid&&pass==password){
printf(“成功登录”);
}
否则{
printf(“未知ID”);
}
}
否则如果(idC!=8&&passC==6 | | idC!=7&&passC==6){
printf(“学生ID应为7或8位,请重试”);
}
否则如果(idC==8&&passC!=6 | | idC==7&&passC!=6){
printf(“请输入6位pin”);
}
}

问题是id和pass的值在while之后发生了变化。谢谢你的帮助。这是解决问题的方法。再次感谢

#include <stdio.h>
#include <stdlib.h>

int main()
{
 int id,pass,idC=0,passC=0,i,myid,mypass,tries=1,idCopy,passCopy;
 myid = 1234567;
 mypass = 123456;

 printf("**LOG IN**\n\n");
 printf("ID: ");
 scanf("%d", &id);
 printf("Password: ");
 scanf("%d", &pass);

 idCopy = id;
 passCopy = pass;
 while(idCopy != 0){
    idCopy /= 10;
    idC++;
 }

 while(passCopy!= 0){
    passCopy /= 10;
    passC++;
 }

 if(idC==8 && passC ==6 || idC==7 && passC==6){
    if(id==myid && pass==mypass){
        printf("Successfully Login");
    }
    else{
        printf("Unknown ID");
    }
 }
 else if(idC!=8 && passC==6 || idC!=7 && passC==6){
    printf("The Student ID should be in 7 or 8 digits, please try again");
 }
 else if(idC==8 && passC!=6 || idC==7 && passC!=6){
    printf("Please enter a 6-digit pin");
 }


 }
#包括
#包括
int main()
{
int-id,pass,idC=0,passC=0,i,myid,mypass,trys=1,idCopy,passCopy;
myid=1234567;
mypass=123456;
printf(“**登录**\n\n”);
printf(“ID:”);
scanf(“%d”和&id);
printf(“密码:”);
scanf(“%d”和“通过”);
idCopy=id;
passCopy=通过;
while(idCopy!=0){
idCopy/=10;
idC++;
}
while(passCopy!=0){
密码副本/=10;
passC++;
}
如果(idC==8&&passC==6 | | idC==7&&passC==6){
如果(id==myid&&pass==mypass){
printf(“成功登录”);
}
否则{
printf(“未知ID”);
}
}
否则如果(idC!=8&&passC==6 | | idC!=7&&passC==6){
printf(“学生ID应为7或8位,请重试”);
}
否则如果(idC==8&&passC!=6 | | idC==7&&passC!=6){
printf(“请输入6位pin”);
}
}

只要使用
如果(id==myid&&pass==mypass)
就可以了,密码是什么?您在此处发布的代码未编译。在代码中,您正在更改用户输入的
id
pass
id/=10;
pass/=10;
)。当while循环中断时,它们的值始终为零,因此这就是为什么
if(id==myid&&pass==mypass)
条件失败的原因。要更正它,请将其存储在不同的变量中,然后继续。@MichaelWalz-显然,密码是:
password=123456在您的双循环
通过
id
将成为0FYI后,在确定另一个答案为已接受后,您几乎没有必要添加您自己的答案,除非它清楚地为讨论添加了一些持久的相关性。在这种情况下,我不确定它是否会。但是,由于回答的问题没有完全解决您的问题,并且该答案的海报让您有责任修复它,(没问题,您可以进行编辑…)将您自己的答案标记为已接受。我想在您的问题中添加编辑,如果我含糊不清,我很抱歉。如果答案没有指出错误,我就可以记下答案,而不是匿名投票。使用
while(idCopy!=0){idCopy/=10;idC++;}
id==0
,结果是
idC==0
。我希望是1。考虑<代码> {{}}(IdPosix!=0)< /代码> @ RahulBharadwaj,我投了你的票吗?如果我有,对不起,我不是故意的,我真的不知道如何使用这个网站。我能解开它吗?对不起。@ryker对不起,我对这个网站很陌生,不知道答案和投票是如何运作的。很抱歉我想我甚至误投了一个真正帮助我的人的票。