【问题标题】:Why the logical operators are not working as expected? [closed]为什么逻辑运算符没有按预期工作? [关闭]
【发布时间】:2016-02-16 16:17:15
【问题描述】:

我正在上初级 CS 课程,我正在尝试用 C 语言编写一个程序,该程序要求输入一个两位数并返回该数字的写出形式。我已经编写了所有代码,当我尝试数字 10-19 时它可以工作,但其他任何代码都没有。如果重要,则使用 C89 标准编译

#include <stdio.h>

int main(void)
{

printf("\n Number to Word Conversion Program");
printf("\n\n This program takes a two-digit number and outputs the English word for the number");

int number = 0;
int numberH1 = 0;
int numberH2 = 0;

printf("\n\n Please enter a two-digit number: ");
scanf("%d", &number);

numberH1 = number / 10;
numberH2 = number % 10;

if (number == 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 ||18 || 19)
{
    switch (number)
    {
        case 10:
        {
            printf("\n\n The number entered was Ten.\n\n");
        }           
        break;
        case 11:
        {
            printf("\n\n The number entered was Eleven.\n\n");
        }           
        break;
        case 12:
        {
            printf("\n\n The number entered was Twelve.\n\n");
        }           
        break;
        case 13:
        {
            printf("\n\n The number entered was Thirteen.\n\n");
        }           
        break;
        case 14:
        {
            printf("\n\n The number entered was Fourteen.\n\n");
        }           
        break;
        case 15:
        {
            printf("\n\n The number entered was Fifteen.\n\n");
        }           
        break;
        case 16:
        {
            printf("\n\n The number entered was Sixteen.\n\n");
        }           
        break;
        case 17:
        {
            printf("\n\n The number entered was Seventeen.\n\n");
        }           
        break;
        case 18:
        {
            printf("\n\n The number entered was Eighteen.\n\n");
        }           
        break;
        case 19:
        {
            printf("\n\n The number entered was Nineteen.\n\n");
        }           
        break;
    }
}
else
{

switch (numberH1)
{
    case 2:
    {
        printf("\n\n The numer entered was Twenty");    
    }   
    break;
    case 3:
    {
        printf("\n\n The numer entered was Thirty");    
    }   
    break;
    case 4:
    {
        printf("\n\n The numer entered was Forty"); 
    }   
    break;
    case 5:
    {
        printf("\n\n The numer entered was Fifty"); 
    }   
    break;
    case 6:
    {
        printf("\n\n The numer entered was Sixty"); 
    }   
    break;
    case 7:
    {
        printf("\n\n The numer entered was Seventy");   
    }   
    break;
    case 8:
    {
        printf("\n\n The numer entered was Eighty");    
    }   
    break;
    case 9:
    {
        printf("\n\n The numer entered was Ninety");    
    }   
    break;
}



switch (numberH2)
{
    case 0:
    {
        printf(".\n\n");
    }
    break;
    case 1:
    {
        printf("-one.\n\n");
    }
    break;
    case 2:
    {
        printf("-two.\n\n");
    }
    break;
    case 3:
    {
        printf("-three.\n\n");
    }
    break;
    case 4:
    {
        printf("-four.\n\n");
    }
    break;
    case 5:
    {
        printf("-five.\n\n");
    }
    break;
    case 6:
    {
        printf("-six.\n\n");
    }
    break;
    case 7:
    {
        printf("-seven.\n\n");
    }
    break;
    case 8:
    {
        printf("-eight.\n\n");
    }
    break;
    case 9:
    {
        printf("-nine.\n\n");
    }
    break;
}
}

return 0;

}

【问题讨论】:

  • if (number == 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 ||18 || 19) --> if (9 &lt; number &amp;&amp; number &lt; 20)
  • 这是意大利面条代码。请使用字符串数组...

标签: c if-statement logical-operators


【解决方案1】:

在您的代码中,

 if (number == 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 ||18 || 19)

是错误的方法。你不能这样链接逻辑运算符。

截至目前,由于operator precedence,您的代码本质上是

if ( (number == 10) || 11 || 12 || 13 || 14 || 15 || 16 || 17 ||18 || 19)

计算结果为任一

  • if ( 1 || 11 || 12 || 13 || 14 || 15 || 16 || 17 ||18 || 19)

  • if ( 0 || 11 || 12 || 13 || 14 || 15 || 16 || 17 ||18 || 19)

两者都会产生 TRUE 值。

你必须像使用它

if ((number == 10) || (number ==  11)||(number ==  12).....

正如我所见,您已经在使用 switch 语句,因此可以完全删除 if 检查。您需要添加一个default 案例来处理other 号码。您可以添加嵌套的switch 来完成任务。

【讨论】:

    【解决方案2】:

    第一个答案是正确的,但是如果您尝试使用以下条件,解决方案会更容易:

    if( (number > 9) || (number < 20))
        { ...
        }
    

    请注意,在这种情况下,您可以只使用:

    if(number < 20)
    

    因为您已经要求输入“两位数”

    【讨论】:

    • 向用户索取东西并不能保证得到它,最好还是检查一下
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2019-05-29
    • 2021-08-19
    • 1970-01-01
    • 2022-12-31
    相关资源
    最近更新 更多