【发布时间】:2013-04-13 14:19:10
【问题描述】:
有几篇关于 while 循环中的 switch 语句的帖子,除了没有一个是在 C 中完成的,至少从我所看到的来看。 C++ 可以创建布尔表达式,我知道,但不是在 C 中。我有一个包含开关控件的 while 循环。但是,当我在 switch 中编写 break 语句时,它会回到循环的开头并使我的程序永远运行。忽略我使用的功能,因为它们确实有效。我只需要澄清一下我对嵌套的处理。谢谢!
Here is my main.c:
while(1)
{
printf("0) Exit\n1) List Tasks\n2) Add Task\n");
printf("3)Delete Task\n4) Add Task From File\n");
printf("What would you like to do?\n");
fgets(buf1, 50, stdin);
p = atoi(buf1);
switch(p)
{
case 0:
break;
case 1:
printTaskList(pTaskList);
break;
case 2:
printf("Enter task name: ");
fgets(buf2,100,stdin);
printf("Enter task priority: ");
fgets(buf3,100,stdin);
printf("Enter task start date: ");
fgets(buf4,50,stdin);
pTask = makeTask(buf2,buf4,buf3);
addTaskToEnd(pTaskList,pTask);
break;
case 3:
printTaskList(pTaskList);
printf("What task would you like to delete? ");
fgets(buf6,50,stdin);
taskNum = atoi(buf6);
removeTask(pTaskList,taskNum);
break;
case 4:
printf("Enter the filename ");
fgets(buf7,50,stdin);
break;
default:
printf("ERROR: %d: Incorrect menu option\n", p);
}
}
【问题讨论】:
-
您的 break 语句用于跳过其余的 switch 子句,这意味着您在 switch 后的行中转储。打破嵌套范围的常见解决方案是将代码移动到函数中并使用 return 而不是 break。
-
确定你想在你的开关体内打破while循环的点,设置一个标志来表明这一点,并使
while(expression)评估中断状态的标志(即while(true)变为while(stay_in_while),并通过您要中断的开关代码清除stay_in_while。 -
你错了,C有布尔表达式和数据类型。它有一个内置类型
_Bool,如果你包含<stdbool.h>,还有bool、false和true。 -
你为什么要编辑你的问题?您应该保持原样,以便其他人可以使用您得到的答案。
-
在编辑时投了反对票,并为其他人删除了它。可能需要一个模组来回滚
标签: c loops while-loop switch-statement infinite-loop