【发布时间】:2014-06-05 18:25:22
【问题描述】:
当我运行我的程序时,它会无限期地询问密码。我输入了正确的密码,但它只是循环回来。我在编译时没有错误。为了编译,我使用了:
gcc -ansi -W -Wall -pedantic -o prog myProgram.c
chmod +x prog
我正在运行 ubuntu 值得信赖。下面是密码相关的代码:
char string[100] = "";
int main(void)
{
char correctPassword[25] = "myPassword";
char password[25] = "";
system("clear");
printf("Enter your password:\n");
scanf("%s", password);
if (password == correctPassword)
{
system("clear");
printf("Enter a string:\n");
scanf("%s", string);
}
else
{
system("clear");
printf("Sorry, incorrect password\n");
system("pause");
main();
}
更新代码:
char string[100] = "";
int main(void)
{
char correctPassword[25] = "myPassword";
char password[25] = "";
int ret;
system("clear");
printf("Enter your password:\n");
scanf("%s", password);
ret = strcmp(password, correctPassword);
if (ret == 0)
{
system("clear");
printf("Enter a string:\n");
scanf("%s", string);
}
else
{
system("clear");
printf("Sorry, incorrect password\n");
system("pause");
main();
}
return 0;
}
编辑 2:我认为现在无法解决,我该如何标记它?
【问题讨论】:
-
用调试器单步调试,看看发生了什么。您拥有自己解决这一问题所需的几乎所有工具。如果你这样做了,你可能会问一个问题,比如“为什么 password == correctPassword 总是返回 false?”这是一个更好的问题。以你的方式递归调用 main 也很奇怪。
-
不能使用
==比较数组。 -
@mee:使用 while 循环。您是否尝试过阅读有关 C 的书?那将是一个很好的开始。
-
我认为你决定尝试密码程序有点太早了。
-
顺便说一句...不要在密码尝试失败时调用 main()。这会导致很多东西被压入堆栈,如果输入了正确的密码,并且程序控制权在其他地方被传递,当代码退出时,它必须展开所有这些。您编写上述代码的方式需要使用标签和 GOTO。但是,如果您询问 10 位不同的 C 程序员如何做到这一点,您可能会得到 10 种不同的答案。一切从 for() 循环,所以你在 x 次尝试后退出,到一个 while 循环,到一个 goto,到一个 do 循环......你必须喜欢 C 语言!
标签: c infinite-loop