uma*_*tan 6 c loops infinite-loop while-loop switch-statement
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
lus*_*oog 15
break;将退出最近的封闭switch或循环.要跳过两个级别,你将不得不使用可怕的goto,或重新组织,以便return完成所需的语义.
while(1) {
switch(x) {
case 0: goto EndWhile;
}
}
EndWhile: ;
Run Code Online (Sandbox Code Playgroud)
要么
void loop() {
while(1) {
switch(x) {
case 0: return;
}
}
}
//...
loop();
//...
Run Code Online (Sandbox Code Playgroud)
您可以在C中完全使用布尔表达式.只需使用int.
int quit = 0;
while(!quit) {
switch(x) {
case 0: quit = 1; break;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想要它,C也有一个布尔数据类型.
#include <stdbool.h>
bool quit = false;
while(!quit) {
switch(x) {
case 0: quit = true; break;
}
}
Run Code Online (Sandbox Code Playgroud)
还有一个选择,对于完全疯狂的人来说.
#include <setjmp.h>
jmp_buf jbuf;
if (!setjmp(jbuf))
while(1) {
switch(x) {
case 0: longjmp(jbuf, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54669 次 |
| 最近记录: |