使用字符串输入切换语句

时间:2017-01-04 17:28:31

标签: c sorting switch-statement scanf

char type;
printf("What type of sort would you like to perform?\n");
scanf("%s", &type);
switch(type)
{
case 'bubble':
    bubble_sort();
case 'selection':
case 'insertion':
default:
    printf("invalid input\n");
}

我正在尝试创建一个程序,根据用户的输入对带有冒泡,选择或插入排序的列表进行排序。

我必须使用开关盒才能这样做。

我定义了一个变量" type"在switch语句之前,然后使用scanf函数为其分配" bubble"," selection"或" inserted"。

但是,当我运行代码并键入" bubble"时,它不执行我的bubble_sort函数(此处未显示),而是转向默认情况。

如何解决此问题?

我不确定是否' char'是定义我的"类型"的正确方法。变量,或者switch语句是否只能用于单个字符。

另外,如果我的代码格式不正确,我很抱歉,因为我是这个网站的新手。

如果我需要在此问题中添加更多信息,请与我们联系!

3 个答案:

答案 0 :(得分:1)

C中的字符串是指针类型,因此当您尝试将字符串值放入switch语句或if语句时,您实际上只是比较两个指针而不是它们指向的值。

您需要像strcmpstrncmp这样的函数来比较实际指向的内容

所以,它应该看起来像这样;

char type[200];
printf("What type of sort would you like to perform?\n");
scanf("%199s", type);
if (strcmp(type,"bubble")==0) {
    bubble_sort();
} else
if (strcmp(type,"selection")==0) {
    something_selection();
} else
if (strcmp(type,"insertion")==0) {
    something_insetion();
} else {
    printf("invalid input\n");
}

答案 1 :(得分:1)

由于type是char并且开关可以使用单个字符,因此您可以使用%c而不是%s扫描一个字符

char type;
printf ( "What type of sort would you like to perform?\n");
printf ( "Enter b for bubble\n");
printf ( "Enter s for selection\n");
printf ( "Enter i for insertion\n");
scanf ( " %c", &type);
switch ( type)
{
    case 'b':
        bubble_sort();
        break;
    case 's':
        selection_sort();
        break;
    case 'i':
        insertion_sort();
        break;
    default:
        printf("invalid input\n");
}

答案 2 :(得分:0)

这在C中是不可能的。因为要比较两个字符串,应该使用strcmp()函数。但是没有办法在开关盒中添加功能。