我对switch语句有疑问。 我尝试了许多不同的方法来处理它,还用谷歌搜索了它,但找不到一个可能的基本错误的解决方案。
错误:
switch(dnevi) -> switch quantity not an integer
case "Pet" -> case label does not reduce to an integer constant
case "Sob" -> case label does not reduce to an integer constant
代码:
char dnevi[5];
printf("Vnesi dan:\n P–ponedeljek, T–torek, S–sreda,C–cetrtek, Pet–petek, Sob–sobota, in N–nedelja" );
scanf("%d", dnevi);
switch(dnevi)
{
case 'P':
printf("To je ponedeljek");
break;
case 'T':
printf("To je torek");
break;
case 'S':
printf("To je sreda");
break;
case 'C':
printf("To je cetrtek");
break;
case 'Pet':
printf("To je petek");
break;
case 'Sob':
printf("To je sobota");
break;
case 'N':
printf("To je nedelja");
break;
default:
printf("Vnos je bil napacen!");
}
答案 0 :(得分:2)
似乎除了单个字符匹配之外,您还想与字符串匹配。因此,您正在尝试读取字符串作为输入。说明了简单的错误处理,您可能需要一些幻想的东西。
if (scanf("%4s", dnevi) != 1) {
strcpy(dnevi, "?"); /* simple error handling */
}
scanf("%*[^\n]"); /* get the rest of the input */
但是,由于错误状态,您需要为switch
提供一个整数。您可以在第一个字符上这样做。
switch(dnevi[0])
但是,您现在必须处理以下事实:您有两个P
选择和两个S
选择。在某些特殊情况下,请以特殊情况处理。字符串文字被"
包围。
case 'P':
if (dnevi[1] == '\0')
printf("To je ponedeljek");
else if (strcmp(dnevi, "Pet") == 0)
printf("To je petek");
else
printf("Vnos je bil napacen!");
break;
...
case 'S':
if (dnevi[1] == '\0')
printf("To je sreda");
else if (strcmp(dnevi, "Sob") == 0)
printf("To je sobota");
else
printf("Vnos je bil napacen!");
break;
...
default:
printf("Vnos je bil napacen!");