做什么停止工作

时间:2009-12-09 20:45:42

标签: c

再次回到另一个菜鸟问题。在为我的家庭作业项目工作时,我发现当我按X时我的菜单不会退出,它只在一小时前工作,而我在main()中没有改变任何东西。我注释掉了函数中的所有代码,以确保函数中的任何内容都不会受到干扰。我找不到任何问题,不胜感激任何帮助。

int main()
{
    char val, enter;
    int c;
/* loopa med do-while */
do
{
printf("===============================\n");
printf("    Olja i Norge AB\n");
printf("===============================\n\n");
printf("  Artikelregister\n");
printf(" A. Lista artiklar\n");
printf(" B. L\x84gg till artikel\n");
printf(" C. Radera artikel\n");
printf(" D. \x8Endra artikel\n\n");
printf("  Kundregister\n");
printf(" E. Lista kunder\n");
printf(" F. L\x84gg till kund\n");
printf(" G. Radera kund\n");
printf(" H. \x8Endra kund\n\n");
printf("  Ordrar\n");
printf(" I. Best\x84ll\n");
printf(" J. Lista ordrar\n\n");
printf(" X. Avsluta\n");
printf("\n===============================");
printf("\n===============================\n");
printf("V\x84lj: ");
scanf("%c", &val);

    do {
        c = getchar();
    } while (c != EOF && c != '\n');

    switch( val )
    {
        case 'A':
        case 'a':
            printf("\n");
            artList();
            break;

        case 'B':
        case 'b':
            printf("\n");
            artAdd();
            break;

        case 'C':
        case 'c':
            artDel();
            break;

        case 'D':
        case 'd':
            artEdit();
            break;

        case 'E':
        case 'e':
            kundList();
            break;

        case 'F':
        case 'f':
            kundAdd();
            break;

        case 'G':
        case 'g':
            kundDel();
            break;

        case 'H':
        case 'h':
            kundEdit();
            break;

        case 'I':
        case 'i':
            order();
            break;

        case 'J':
        case 'j':
            orderList();
            break;

        case 'X':
        case 'x':
            break;
    }

    printf("\nTryck <ENTER> f\x94r att forts\x84tta.");
    scanf("%c", &enter);
    system("cls");

}while(val != 'X' || val != 'x');

return 0;
}

4 个答案:

答案 0 :(得分:17)

do { ... } while (val != 'X' || val != 'x');

如果val为'X',则“转换”为

do { ... } while (0 || 1);

如果val为'x',则“转换”为

do { ... } while (1 || 0);

如果val是'a',则“转换”为

do { ... } while (1 || 1);

它永远不会评估为假。

您需要重写条件 - 提示:使用&&:)


修改

哦......假设“!=优先于||”。我永远不知道优先级是什么,我总是在条件表达式中使用括号

do { ... } while ((val != 'X') || (val != 'x'));

答案 1 :(得分:2)

不想过多帮助你,但如果你仔细看,这个条件:

while(val != 'X' || val != 'x');

总是评估为真。

答案 2 :(得分:1)

而不是

while(val != 'X' || val != 'x')

while(val != 'X' && val != 'x')

答案 3 :(得分:0)

val != 'X' || val != 'x'

如果val == 'x',那么val != 'X',则上述情况属实。同样,val == 'X'时也是如此。