【问题标题】:C programming: IF statementsC 编程:IF 语句
【发布时间】:2014-03-30 04:57:24
【问题描述】:

我需要有关 C 编程问题的帮助。我想知道是否有办法让用户在控制台输入一个单词,它会显示你编程的任何内容。这是我想做的一个例子

int Choice;
int Energy = 100;
printf ("Type 2817!\n");
scanf ("%s", &Choice);

if(Choice == 2817)
{
    printf ("You have started the game\n\n\n\n\n\n\n\n\n\n\n");
}
else if(Choice == "Energy") //This isnt working in my compiler.
                                //Apparently the == sign is the underlined error
{
    printf("%d", Energy);
}

到目前为止,我只能输入数字,但我希望能够输入单词并能够使用命令。所以基本上我希望能够输入“能量”,它会显示你有多少能量(printf(“%d”,能量)

请帮忙,

感谢您的阅读。

【问题讨论】:

  • 在您的代码中应该是“if(strstr(Choice,"2817") == 0”...strstr 是在另一个字符串中查找特定字符串的最佳方式。
  • @MichaelDautermann 仅当“Choice”是字符串时;-)
  • 呸...我没注意到“Choice”是“int”。你是对的!
  • 选择应该是一个字符数组。 char 选择[100],或者符合要求的东西
  • 单词是C中的字符串。了解string.h中的函数

标签: c variables int


【解决方案1】:

在将选项(int 类型)与字符串文本进行比较时,您输入了错误的数据类型。在 C/C++ 中,与动态编程语言不同,如果不正确转换它们中的任何一个,就无法将 int 与字符串进行比较。您使用 strcpy 比较字符串和 == 比较 int。

然后你的程序就会运行。

【讨论】:

    【解决方案2】:

    我不确定你的程序要做什么,但让我专注于几个明显不正确的行。

    首先,在

    int Choice;
    scanf ("%s", &Choice);
    

    Choice 的类型有误:它是“int”,而它应该是 char 的静态数组(比如说 char Choice[32])。在这种情况下,您还必须在扫描中删除“Choice”之前的“&”,以便代码变为:

    char Choice[32];
    scanf ("%s", Choice);
    

    此外,在

    else if(Choice == "Energy") //This isnt working in my compiler.
    

    您正在尝试使用运算符“==”比较两个字符串。这在 C 中不起作用。您应该按以下方式使用函数“strcmp”:

    #include<string.h>
    [...]
    else if(strcmp(Choice, "Energy")==0)
    

    您最好使用以下方法来防止任何缓冲区溢出

    else if(strncmp(Choice, "Energy", 32)==0)
    

    (将32替换为Choice中的最大元素数)

    编辑请注意,您也应该将第一个比较从

    if(Choice == 2817)
    

    if(strncmp(Choice, "2817", 32))
    

    因为 Choice 不再是 int...

    【讨论】:

    • else if(strncmp(Choice, "Energy", 32)==0) { printf ("Hi");它强调了代码的“选择”部分。我不确定为什么这是一个错误。这是错误:错误 C2040: 'Choice' : 'char [32]' 在间接级别上与 'int' 不同 –
    • 你能告诉我确切的错误信息吗?当我尝试时,我在“if(Choice==2817)”上得到一个错误。这个应该通过使用 strncmp(Choice, "2817", 32) 来修复
    • texttest1.cpp(29): error C2040: 'Choice' : 'char [32]' 与 'int' 的间接级别不同
    • 好的,从这个答案来看:stackoverflow.com/questions/1991019/c-error-c2040 您可能正在使用 C++ 编译器。因此,您应该用单引号替换双引号。也就是说,“能量”变成了“能量”。
    • 非常感谢您的帮助。这么久以来,我一直试图弄清楚这一点。我认为它现在有效。我没有错误,所以它应该能够工作。再次感谢您的帮助。
    【解决方案3】:

    代码中的错误很少。

    1. 使用strcmp()比较字符串。

    2. int Choice;声明为char Choice[50]

    3. 在scanf()中读取字符串时删除&amp;

    4. 与 if(Choice == 2817) 比较是不正确的。使用if(strcmp(Choice , "2817") == 0)

    【讨论】:

    • else if(strncmp(Choice, "Energy", 32)==0) { printf ("Hi");它强调了代码的“选择”部分。我不确定为什么这是一个错误。这是错误:错误 C2040: 'Choice' : 'char [32]' 在间接级别上与 'int' 不同
    【解决方案4】:

    "String" 是 const char *,您无法在 C++ 中使用 == 进行比较。您需要使用 strcmp 来比较字符串。

    strcmp 如果字符串相同,则返回零。

    【讨论】:

      【解决方案5】:

      将您的输入读取为字符数组 例子

      char bleh[250]; scanf ("%s", bleh);//or scanf ("%s", &bleh[0]);

      然后使用strcmp命令比较两个数组

      strcmp(&amp;bleh[0], "blabla"); //function will return 0 if two arrays match

      希望对你有帮助

      【讨论】:

        【解决方案6】:

        解决此问题的最佳方法是将Choice 设为字符串,然后将其与字符串值进行比较,或从字符串中提取数据(例如使用atoi)并将其分配给其他变量。 C 是一种静态类型的编程语言,int 不能成为(或与之比较)字符串,因为它们的类型不同。如果您想要来自用户的任意数据,解决该问题的最佳方法可能是使用字符串。 :-)

        【讨论】:

          猜你喜欢
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多