C程序无限循环

时间:2014-06-05 18:25:23

标签: c infinite-loop

当我运行程序时,它会无限期地要求输入密码。我输入了正确的密码,但它只是循环回来。我在编译时没有错误。为了编译,我使用了:

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:我认为现在这已经解决了,我如何将其标记为?

2 个答案:

答案 0 :(得分:3)

这一行

if (password == correctPassword)

不符合您的想法。它不是比较字符串,而是比较每个字符串的第一个字符的内存地址。如果你想比较字符串,你想使用strcmp,你可以在这里阅读:http://www.tutorialspoint.com/ansi_c/c_strcmp.htm

编辑响应代码的变化;你有这条线

if(ret = 0)

你想要

if(ret == 0)

我认为这是一个错字。

答案 1 :(得分:-3)

在scanf语句中添加&符号。

scanf("%s", &password);