我正在努力完成这项工作。它只是没有完整选项的代码运行示例。
该程序需要的是用户输入选项1-3或a-c。我正在使用一个字符串,以防用户输入的不仅仅是一个字符。然后,switch case应该只比较数组中的第一个char和case。 do while循环是为了确保它继续运行直到它们输入正确的字符。
#include <stdio.h>
#define SIZE 81
void main(){
char thing[SIZE] = {3};
int rvalue;
do
{
scanf_s("%s", thing);
switch (thing[0])
{
case 'a':
case 1:
printf("first\n");
rvalue = 1;
break;
case 'b':
case 2:
printf("second\n");
rvalue = 2;
break;
case 'c':
case 3:
printf("third\n");
rvalue = 3;
break;
default:
printf("Wrong\n");
rvalue = 4;
break;
}
} while (rvalue == 4);
}
答案 0 :(得分:2)
更改
scanf_s("%s", thing);
要
scanf_s("%s", thing,(unsigned int)sizeof(thing)); //Read the comments to know why the cast is required
这样做是因为scanf
和scanf_s
功能不同。 scanf_s
有一个额外的参数可以阻止buffer overflows
也改变这些
case 1:
case 2:
case 3:
要
case '1':
case '2':
case '3':
因为字符1('1'
)和其余部分与整数1不同。字符(用单引号括起来的字符)的值在ASCII table中表示。
答案 1 :(得分:1)
就目前而言,当first
字符串中的第一个字符为thing
或a
时,您希望打印1
,依此类推。
问题是case 1:
与case '1':
不一样。 1
是int
,'1'
是char
,当您比较字符串的第一个字符时,您需要更改case
陈述了一点。
代码:
#include <stdio.h>
#define SIZE 81
void main(){
char thing[SIZE] = {3};
int rvalue;
do
{
scanf_s("%s", thing,SIZE);
switch (thing[0])
{
case 'a':
case '1':
printf("first\n");
rvalue = 1;
break;
case 'b':
case '2':
printf("second\n");
rvalue = 2;
break;
case 'c':
case '3':
printf("third\n");
rvalue = 3;
break;
default:
printf("Wrong\n");
rvalue = 4;
break;
}
} while (rvalue == 4);
}