【问题标题】:IF - condition with char comparison not working in CIF - 带有字符比较的条件在 C 中不起作用
【发布时间】:2013-04-06 15:13:11
【问题描述】:

我真的不知道哪里错了。这似乎是对的,不是吗?

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   char op;

   printf("Type in operator (+,-,/,*):");
   scanf("%i",&op);

   if(op == '+')
   {
      printf("You entered a plus");
   }

   system("pause"); 
   return 0;
}

我希望它在输入 + 时打印“您输入了一个加号”。 它没有。

我对 C 有点陌生。 在此先感谢:)

【问题讨论】:

  • 由于您是 C 新手,请尽量避免养成不良习惯 - 例如致电system("pause")
  • 另外,在您的编译器中启用所有警告和调试信息(例如,在 Linux 上使用 gcc -Wall -g),改进代码直到没有给出警告,并学习如何使用调试器。

标签: c


【解决方案1】:

if 条件很好。问题是scanf()格式,应该是

scanf("%c",&op);

%i 读取一个整数,而%c 读取一个char。)

【讨论】:

  • 感谢您的快速回答,它现在可以工作了:) 但另一个问题:当我希望用户在输入字符之前输入一个整数时,控制台会跳过它并且不给他甚至尝试输入...例如: printf("Enter number:"); scanf("%i",&number); printf("请输入字符:"); scanf("%c",&op);
  • 这是怎么回事?我正在尝试做一个计算器。输入最后一个整数后,它会跳过输入运算符(作为字符)的查询。 ??
  • 输入整数后按 ENTER 时的换行符 '\n' 仍然存在,scanf 读取它而不是运算符。想想如何使用循环来跳过换行符。
  • 您可能想了解getcgetchar ...还要记住stdin(以及stdout)通常是“行缓冲的”
【解决方案2】:
scanf("%i", &op);

您需要一个整数。所以,当你写一个字符并按下&lt;Enter&gt;scanf 失败(你可以查看它的返回值来查看):

if (scanf("%i", &op) != 1)
{
    /* Treat the error. */
}

使用scanf中的%c格式读取字符:

scanf("%c", &op);

【讨论】:

    【解决方案3】:

    您的问题是格式说明符错误

    //In scanf instead of 
    scanf("%i",&op);
    // you have to provide 
    scanf("%c",&op);
    
    %i use for reading integer whereas %c use for reading char.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2012-12-06
      • 1970-01-01
      相关资源
      最近更新 更多