2013-11-23 162 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" ...)

相关问题