我在使此嵌套 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/