首页 > 解决方案 > C 中的嵌套 While 循环

问题描述

我在使这个嵌套的 while 循环在这个终端应用程序中工作时遇到问题。我正在尝试构建一个系统,其中包含客户端和每个具有特定功能的管理员。

scanf("%s",sign_in_choice);
int admin_result, client_result, number_of_clients, x, c;
admin_result = strcmp(sign_in_choice,"Admin");
client_result = strcmp(sign_in_choice,"Client");
char client_choice[10];
int client_username;
int client_password;
int client_choice_log_in, client_choice_register;


while(x == 0)
{

    if(admin_result == 0 )

    {

    printf("Welcome to Admin Page\n");

    }

    else if(client_result == 0)

    {   
        printf("Testing");
        while(c == 0)
        {
        //START OF CLIENT PAGE
        printf("Welcome to Client Page\n");
        printf("Register or Log in?\n");
        scanf("%s",client_choice);
        client_choice_log_in = strcmp(client_choice,"Login");
        client_choice_register = strcmp(client_choice,"Register");
            if(client_choice_register == 0)
            {
            // REGISTER
            reg(client_number);
            // END OF REGISTER
            }
            else if(client_choice_log_in == 0)
            {
        //LOG IN
            printf("Please enter your credentials\n");
            printf("Enter your afm:\n");
            scanf("%d", &client_username);
            printf("Enter your year of birth:\n");
            scanf("%d", &client_password);
            login(client_username, client_password, client_number, client_verify);
        //END OF LOG IN
            // PERSONAL CLIENT PAGE
                i = client_number;
                printf("Welcome to your Personal Client Page: %s \n", client_array[i].client_name);
                printf("Verify : %d\n",client_verify);
            // END OF PERSONAL CLIENT PAGE
            }
            else
            {
            printf("Invalid input.Please try again.\n");
            scanf("%s",client_choice);
            client_choice_log_in = strcmp(sign_in_choice,"Login");
            client_choice_register = strcmp(sign_in_choice,"Register");
            }
        // END OF CLIENT PAGE
        }
    }
    else
    {
    printf("Invalid input.Please try again.\n");
    scanf("%s",sign_in_choice);
    admin_result = strcmp(sign_in_choice,"Admin");
    client_result = strcmp(sign_in_choice,"Client");
    }
}

如果我删除 while(c == 0) 循环,代码就可以工作。它允许我选择登录或注册并继续。如果我在输入“客户端”时保持循环不变,程序将进入无限循环打印“测试”。此外,如果我输入“管理员”,程序再次进入无限循环打印“欢迎来到管理页面”,尽管 while 循环出现在程序的后面。至少在我的理解中,while(c == 0) 循环应该仅影响其中包含的内容而不影响其外部,至少在这种特殊情况下。我使用的是 Devc 5.11。此外,我尝试编译和运行 vs 代码和代码块,在这些情况下,程序甚至不会超出“管理员”客户一开始的选择。如您所见,我有一些函数和结构未在此处显示,但它们不应该影响我的问题,因为一切正常,直到我尝试使这个嵌套的 while 循环工作。

标签: cloops

解决方案


c未初始化,因此它具有未定义的行为,这取决于您的编译器。您将需要初始化变量。并且为了确保你没有无限循环,你必须处理当你有一个客户端并且c不为 0 的情况。你可以将它设置为 0,或者其他东西,只是不要留在那里一个else总是会被输入的,将不会改变c,里面会有一个循环,这取决于c.

也许我错过了,但我没有看到你如何设置循环c内部的值while (c == 0),所以如果c恰好是 0,那么内部循环似乎也是无限的。


推荐阅读