2016-12-05 17 views
1

スイッチケースで1または2または3を選択してもループしない理由を理解できません。タスクを実行してもプログラムから抜けています.Eを押さなくてもまたはe。 あなたのお手伝いが必要です。C do while issue

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'); 
+5

'CH!= 'e' を持っている|| ch!= 'E'は常に真です。 – Marian

+0

あなたは 'ch'の前に '&'を忘れています:scanf( "%c"、&ch); ' –

+0

あなたは、'!(ch == 'e' || ch == 'E') ' – Iluvatar

答えて

2

3つの問題:

  1. あなたscanfは間違っている、あなたはchポインタを供給する必要があります。使用するscanf("%c", &ch);

  2. while (ch != 'e' && ch != 'E');を意味します。 cheの場合を考えれば分かります。その場合、ch != 'E'1なので、ループは終了します。

  3. 書き換えcase 'e' || 'E':case 'e' : case 'E':から'e' || 'E' C.

    に値1
+0

ありがとう –