簡體   English   中英

C:switch語句中的退出情況

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM