C.边发边做

C.边发边做,c,C,我不明白为什么即使我在切换框中选择1、2或3,它也不会循环。它只是在任务完成后退出程序,即使我没有按E或E。 我需要你的帮助 char ch; do { char* p; printf("Press 1 for qu. 1 \nPress 2 for qu. 2 \nPress 3 for qu. 3\nPress 'e' or 'E' to exit\n"); scanf("%c", ch); switch (ch) { case '1':

我不明白为什么即使我在切换框中选择1、2或3,它也不会循环。它只是在任务完成后退出程序,即使我没有按E或E。 我需要你的帮助

char ch;
do
{
    char* p;
    printf("Press 1 for qu. 1 \nPress 2 for qu. 2 \nPress 3 for qu. 3\nPress 'e' or 'E' to exit\n");
    scanf("%c", ch);
    switch (ch)
    {
    case '1':
        getMatrix();
        break;
    case '2':
        printf("\nPlease enter strDestination:\n");
        char str1[20], str2[20];
        scanf("%s", str1);
        printf("\nPlease enter strSource:\n");
        scanf("%s", str2);
        printf("%s\n", mystrcat(str1, str2));
        break;
    case '3':
        printf("\nPlease enter the first string (str):\n");
        char str3[20], str4[20];
        scanf("%s", str3);
        printf("\nPlease enter the sub string to search for(strSearch):\n");
        scanf("%s", str4);
        p = myStrstr(str3, str4);
        if (p != 0)
            printf("Location found: char %c index %d\n", *p, p - str3);
        else
            printf("strSearch is not found in str\n");
        break;
    case 'e' || 'E':
        system("exit");
        break;
    default:
        printf("Wrong input\n");
        break;
    }
} while (ch != 'e' || ch != 'E');
三个问题:

  • 您的
    scanf
    不正确,您需要提供指向
    ch
    的指针。使用
    scanf(“%c”和&ch)

  • 你的意思是
    while(ch!=“e”&&ch!=“e”)。如果您考虑“代码> CH <代码>是<代码> E < /代码>,这是很容易看到的。在这种情况下,
    ch!='E'
    1
    ,因此循环仍然终止

  • 案例“e”|“e”:
    改写为
    案例“e”:案例“e”:
    案例“e”|“e”
    的值为1,单位为C


  • ch!='e'| | ch!='E'
    总是正确的。您忘记了
    ch
    之前的
    &
    scanf(“%c”,&ch)!(ch='e'| ch='e')
    记住C中的逻辑表达式使用。所以如果
    ch!='e'
    为真,则整个表达式为真。如果
    ch!='e'
    为false,则
    ch!='E'
    将为真。因此,无论你做什么,你都会得到一个始终为真的表达式。顺便说一句,如果你想退出你的程序,那么
    system(“exit”)
    不是这样做的。