带switch语句的C编程问题

时间:2019-04-18 19:56:39

标签: c

我对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!");

}

1 个答案:

答案 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!");