2013-11-23 191 views
3

我正在嘗試編寫一個程序,該程序涉及將字符作爲解碼電阻代碼的程序的菜單系統的一部分。在菜單的最後,它會詢問您是否要解碼另一個電阻,如果用戶選擇「是」,則重複該程序。C「指針和整數之間的比較」菜單的警告

這是我的代碼至今:

//used for repeating input menu 
    int menu = 0; 
    char menuChoice = 0; 

    //rest of program goes here  

    printf("Do you want to decode another resistor? (y/n)"); 
    scanf("%c", &menuChoice); 

    while(menuChoice != "y" && menuChoice != "Y" && menuChoice != "n" && menuChoice != "N") 
    { 
    if(menuChoice != "Y" && menuChoice != "y") 
    { 
     if(menuChoice == "N" || menuChoice == "n") 
     { 
     menu = 0; 
     } 

     else 
     { 
     printf("Invalid choice."); 
     } 
    } 
    } 

當我試着使用GCC編譯,我結束了,上面寫着警告「指針和整數之間的比較。」由於scanf只接受指針,我不知道如何將掃描的字符與「Y」或「n」進行比較。有什麼我在這裏失蹤?

+10

字符文字需要char_literal字符如。 ''y''不是'「y」' – amdixon

+0

而你得到關於指針的混淆錯誤信息的原因是一個字符串字面值是數組類型的,而且在大多數情況下,數組表達式是隱式轉換爲指向數組的第一個元素。因此,'menuChoice!=「Y」'試圖比較整型值'menuChoice'('char'是一個整數類型)與''Y''到'char *'的隱式轉換所產生的指針值。比較沒有任何意義。事實上,我發現gcc只是警告它而感到失望。它可以和恕我直言,應該把它視爲一個致命的錯誤。 –

+0

@KeithThompson如果gcc開始給隱式指針 - 整數轉換提供錯誤,它可能會喚醒一羣人修復舊代碼 –

回答

0

調整你的比較。目前他們將一個整數(或者諸如menuChoice的char)與一個數組(比如「y」)進行比較。

// menuChoice != "y" 
menuChoice != 'y' 

while(menuChoice != "y") && ...)可能應該刪除。

if(menuChoice == "N" ...應該是else if(menuChoice == "N" ...)

相關問題