Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:switch语句中的exit case_C_Switch Statement - Fatal编程技术网

C:switch语句中的exit case

C:switch语句中的exit case,c,switch-statement,C,Switch Statement,我只是有一个关于开关箱的简短问题。 我能做这个吗?我不能让它工作。当我键入quit时,程序只说了3次invalid。 请原谅伪代码。 哎呀,我忘了在那部分之前提到printf函数是这样的 char choice; printf("list, add, delete, write, quit\n"); do { scanf("%c", &choice); //if (&choice== "quit"){exit(1);} switch(choice) {

我只是有一个关于开关箱的简短问题。 我能做这个吗?我不能让它工作。当我键入quit时,程序只说了3次invalid。 请原谅伪代码。 哎呀,我忘了在那部分之前提到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及其近亲进行。在这种情况下,您正在比较字符串的地址。

此外,由于您除了在
默认情况下使用
中断
之外,不会使用
中断
,因此您将自动“删除”默认情况(即使您的输入
选项与“列表”、“添加”、“删除”和“写入”匹配)

来回答您的问题:

是的,您可以在任何地方调用
exit()
,包括在switch case语句中


但是,该代码有很多问题,请参见我在问题本身的评论。

尽管您不能按照自己想要的方式直接比较字符串,但有一种方法可以使用字典和定义/枚举来进行切换(请参见我在那里所做的操作):

对于switch语句:

switch (getchoice(choice)) {
case LIST:
case ADD:
case WRITE:
case DELETE:
case INVALID:
default:
    printf("Invalid\n");
    break;
case QUIT:
    exit(1);
}

注意:emptor,因为这还没有通过编译器运行,但总体思路应该足够清晰,以适应您的具体情况。

这不是有效的C,甚至不应该编译。数组和指针都不是有效的大小写标签。@R。。所以,程序的输出实际上是正确的,不是吗?@panda当然。这不是你的编译器中的一个bug什么的。我之前忘记提到printf函数了。Sorry此代码段有很多问题:某些指令的顺序错误(复制粘贴错误),您正在读取单个字符并与字符串进行比较,比较本身是错误的,因为它在比较地址…此答案是错误的(第三个=仅最后一句)@user1428720-如果您将其更改为if else,那么它就开始正确了-您将比较指针而不是字符串内容,并且如果任何输入字符串来自同一编译单元中的数据而不是字符串文本,则可能会错过所有匹配项。在此之前我忘了提到printf函数。很抱歉
switch (getchoice(choice)) {
case LIST:
case ADD:
case WRITE:
case DELETE:
case INVALID:
default:
    printf("Invalid\n");
    break;
case QUIT:
    exit(1);
}