我在使此嵌套while循环在此终端应用程序中工作时遇到问题。我正在尝试使用具有某些功能的Clients和Admin构建系统 每个功能。
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)循环,那么代码就起作用了,它允许我选择Login或Register并继续。如果我在输入'Client'时退出循环,程序将进入无限循环打印'testing'。此外,如果我输入'Admin',程序将再次进入无限循环打印'welcome to admin page',尽管while循环出现在程序的后面。至少在我的理解下while(c == 0 )循环应该只影响其中包含的内容,而不是影响它之外的内容,至少在这种情况下。我使用的是Devc 5.11,我还尝试编译并运行vs代码和代码块,在这种情况下,程序甚至无法超越您可以看到我这里没有显示一些功能和结构,但是它们不会影响我的问题,因为一切正常,直到我尝试使此嵌套的while循环起作用为止。
答案 0 :(得分:0)
c
未初始化,因此它具有未定义的行为,具体取决于您的编译器。您将需要初始化变量。并且要确保没有无限循环,必须在有客户端且c
不为0的情况下进行处理。可以将其设置为0或类似的东西,只是不要在其中留下{{ 1}}会一直输入,不会更改else
,并且内部会有一个循环,具体取决于c
的值。
也许我错过了它,但是我看不到如何在c
循环中设置c
的值,所以如果while (c == 0)
恰好为0,则该内部循环似乎也无限。