【问题标题】:Why is my if conditional expression always true? [duplicate]为什么我的 if 条件表达式总是为真? [复制]
【发布时间】:2022-11-10 02:32:37
【问题描述】:

我一直在努力让我的函数中的 if 语句正确评估。我试图让 if 语句仅在变量等于“Y”或“y”时才评估为真。我不熟悉 char 变量,所以我怀疑我要么错误地将 char 存储到变量中,要么以始终正确的方式评估表达式。

我写的代码如下:

#include <stdio.h>

// fuctions
int Greeting(void);

// variables
int return_status;

int main(void)
{
    return_status = Greeting();
    printf("Return status is %d \n", return_status);
    return 0;
}

int Greeting(void)
{
    char status;
    printf("Welcome to the program. Would you like to continue?(Y/N)\n");
    scanf(" %c", &status);

    if (status == 'Y' || 'y') // Problem is probably here
    {
        printf("You have said %c.\n", status);
        return 0;
    }
    else
    {
        return 1;
    }
}

【问题讨论】:

  • 您的条件组合无法按您的预期工作。您需要if(status == 'Y' || status == 'y') - 第二个条件仅评估'y' 是否为true 总是如此
  • 那里必须成为这个的合适的规范副本......看起来......
  • 首先正确缩进您的代码,例如像您的 C 教科书中的示例一样。
  • 正确附加足够的警告级别并将其视为错误,您的编译器应该会告诉您哪里出了问题see here
  • @AdrianMole 我同意。问题是这个错误通常只由非常初级的工程师/学生对 C 语言非常陌生。他们的工程青年渗透到他们的问题质量和白话选择中。老实说,这个问题的标题可能是我遇到这个问题时见过的更好的标题之一。它们通常是“我的代码不起作用”、“出了什么问题”等之类的,基本上没用。至少这个问题的标题暗示了问题的特殊性。

标签: c


【解决方案1】:

你在这里写的第一个比较是正确的,但是你写在语句右边的表达式不是比较。你直接在那里写表达式'y',因为它不对应于 ASCII 表中的 0,它被认为是真的,并且在与 OR 表达式结合时总是给出真结果。

if(status == 'Y' || 'y')

你应该这样改变;

if((status == 'Y') || (status== 'y'))

【讨论】:

    【解决方案2】:
    if((status == 'Y') || (status == 'y')) //Problem is probably here
    {
      printf("You have said %c.
    ", status);
      return 0;
    }
    

    你可以像这样检查char

    【讨论】:

      【解决方案3】:

      是的,问题在于“if”语句。你必须写:

      if (status == 'Y' || status == 'y')
      

      变量 return_status 应声明为 main() 函数。

      【讨论】:

      • “可以声明为 main()...”: 不是“可”“应该”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2022-11-03
      • 1970-01-01
      • 2015-12-07
      • 2017-11-17
      • 2015-08-19
      • 1970-01-01
      相关资源
      最近更新 更多