c - 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 循环工作。
解决方案
c
未初始化,因此它具有未定义的行为,这取决于您的编译器。您将需要初始化变量。并且为了确保你没有无限循环,你必须处理当你有一个客户端并且c
不为 0 的情况。你可以将它设置为 0,或者其他东西,只是不要留在那里一个else
总是会被输入的,将不会改变c
,里面会有一个循环,这取决于c
.
也许我错过了,但我没有看到你如何设置循环c
内部的值while (c == 0)
,所以如果c
恰好是 0,那么内部循环似乎也是无限的。
推荐阅读
- sql - Tableau 中的自定义 SQL 查询
- linux-kernel - 如何使用 STM32MP1 分发包从 Cubemx 编译设备树?
- javascript - 路由内容未在 Vue-router 和 Laravel 中显示
- javascript - 如何解析包含array1的object1,array1包含object2,object2包含array3等等..在打字稿或javascript中
- swagger - Connexion 如何设置响应内容类型?
- javascript - 有没有办法在 Angular 7 中使用引导程序来实现多级响应式下拉顶部导航栏?
- embedded - 为什么不能从用户空间访问/更改 GPIO?
- typescript - 如何在 VueJS 3.0 中使用 defineComponent 注册本地组件
- excel - 带有 selection.rows.count 的 vba 数字错误
- reactjs - 尝试从 s3 删除图像时出现 403(禁止)