[英]C:exit case in switch statement
我只是對開關盒有一個簡單的問題。 我可以這樣做嗎? 我無法正常工作。 當我鍵入退出時,該程序僅說無效3次。 請原諒偽代碼。 哎呀,我忘了提到那一部分之前,printf函數看起來像這樣。
char choice;
printf("list, add, delete, write, quit\n");
do
{
scanf("%c", &choice);
//if (&choice== "quit"){exit(1);}
switch(choice)
{
case "list":
case "add":
case "delete":
case "write":
default:
printf("Invalid\n");
break;
case "quit":
exit (1);
}while(&choice !="quit");
}
您不能比較這樣的字符串。 字符串比較應使用strcmp
及其同類進行。 在這種情況下,您要比較字符串的地址。
盡管您無法以所需的方式直接比較字符串,但是有一種方法可以使用字典和定義/枚舉進行切換(請參閱我在此處所做的事情):
enum choices { LIST, ADD, DELETE, WRITE, QUIT, INVALID };
int
getchoice(char *input)
{
static struct choices {
enum choices val;
const char *string;
} choices [] = {
{ LIST, "list" },
{ ADD, "add" },
{ DELETE, "delete" },
{ WRITE, "write" },
{ QUIT, "quit" },
{ -1, NULL }
};
int i;
for (i = 0; choices[i].val != -1; i++)
if (strcmp(input, choices[i].string) == 0)
break;
if (choices[i].val == -1)
return INVALID;
return (choices[i].val);
}
然后為您的switch語句:
switch (getchoice(choice)) {
case LIST:
case ADD:
case WRITE:
case DELETE:
case INVALID:
default:
printf("Invalid\n");
break;
case QUIT:
exit(1);
}
請注意,因為尚未通過編譯器運行,但總體思路應足夠清楚,以適應您的特定情況。
另外,由於您在default
情況下不使用break
,因此您將自動“跳入”默認情況(即使您輸入的choice
與“ list”,“ add”,“ delete”和“ write”相匹配) )
要回答您的問題:
是的,您可以在任何地方調用exit()
,包括在switch-case語句內部。
但是該代碼存在許多問題,請參閱我對問題本身的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.