在while循環中有幾個關於switch語句的帖子,除了它們都沒有在C語言中完成的事情,至少從我所見過的事實中除外。 C++可以創建布爾表達式,我知道這些布爾表達式,但不包含在C中。我有一個包含開關控件的while循環。但是,當我在交換機中寫入break語句時,它會返回到循環的開頭,並使我的程序永遠運行。忽略我使用的功能,因爲它們確實有效。我只需要對我的嵌套處理進行一些說明。謝謝!C語言while循環中的switch語句
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語句用來跳過開關條款的休息,這意味着你在切換後的行dump出來。一個解決嵌套作用域的通用解決方案是將代碼移入函數中,並使用return而不是break。 – 7stud 2013-04-20 06:16:03
確定你想要在開關體內的while循環中分出的點,設置一個表示這個的標誌,並且讓'while(expression)'評估標誌爲break狀態(即'while(true)'變成'而(stay_in_while)'和'已經通過stay_in_while'開關代碼清除你想打破。 – WhozCraig 2013-04-20 06:16:34
你錯了,C具有布爾表達式和數據類型。它具有內置式'_Bool'如果包含''還有'bool','false'和'true'。 –
2013-04-20 06:31:05