c - C 中的嵌套 While 循环

标签 c loops

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

最佳答案

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

也许我错过了,但我不明白你如何在 while (c == 0) 循环中设置 c 的值,所以 if c 恰好是 0,内部循环似乎也是无限的。

关于c - C 中的嵌套 While 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51917580/

相关文章:

c++ - 如何在指针表示法和数组表示法中循环遍历二维数组

c++ - 添加多个 qslider 和 qspinner

c - 理解 Unix 中的 fork 机制

c - 如何为预处理器创建变量值 channel ?

c - 在 C 中,为什么 (int*)&x[k] 对于二维数组 x 和 (int*)x[k] 一样好用?

c - 如何只输入一个EOF结束scanf

java - 使用java从Excel文件的列中删除HTML标签

c - 指向自身的指针 C

javascript - 循环遍历多个 PHP 生成的 DIV,并在悬停时显示/隐藏

java - 如何迭代hashmap并将实体存储到mysql中