为什么我的程序的功能不能正确执行?

时间:2018-12-27 21:50:33

标签: c++ boolean-expression

(这是我关于Stack Overflow的第一个问题,所以请告诉我是否可以说得更好。)

我有一个程序,可以让您打开计算器或“数字生成器”。您可以通过在控制台中输入C或N来选择要打开的文件。当我刚开始学习C ++时,代码对我来说非常复杂,因此我无法真正解决与之相关的任何问题。此外,我还定义了显示和包含的所有变量。

但是,无论我一开始输入什么内容(即使答案是无效的,例如Q或123),也会打开计算器。

void init()
{
    std::cout << "Open calculator or number generator? ( C or N ): ";
    std::cin >> firstpick;
}

int main()
{
    init();
    if (firstpick == 'c' || 'C')
        calculator();
    else if (firstpick == 'n' || 'N')
        numbergen();
    else if (firstpick != 'c' && 'n' && 'C' && 'N')
        std::cout << "ERROR: Invalid answer to init";

    return 0;
}

预期结果是允许我打开C或N,并在我输入无效答案时使程序返回错误,但是无论如何它总是打开C。

4 个答案:

答案 0 :(得分:1)

firstpick == 'c' || 'C'将始终返回true

firstpick == 'c'的求值结果为false,但语句的后半部分仅为'C',其值作为非零值将求值为true

将逻辑更改为if (firstpick == 'c' || firstpick == 'C'),并对数字生成器逻辑遵循相同的模式。

答案 1 :(得分:0)

您的代码是

if (firstpick == 'c' || 'C' != 0)

要获得效果,您需要做...

if (firstpick == 'c' || firstpick == 'C')

答案 2 :(得分:0)

您编写的if函数错误。

||逻辑或将两个逻辑条件分开,其中至少一个为真以产生true值作为结果。

在您的情况下,第一个“ if”检查的条件是:

  1. firstpick == 'c'
  2. 'C'

因此,如果1.或2.或两者都为真,则if将产生true

当然,您现在可以看到2.始终为true,因此如果始终返回true,则整个字段。

尝试像这样更改您的ifs:

if (firstpick == 'c' || firstpick == 'C')

它应该会更好地工作。

答案 3 :(得分:0)

您没有定义firstpick是什么,因此您提供的代码无法编译。您还需要从初始化函数返回一个char。下面的代码应满足您的需求。另外,您还需要在if语句中“或”进行单个比较。

#include<iostream>
char init()
{
    std::cout << "Open calculator or number generator? ( 1 or 2 ): ";
    char option;
    std::cin >> option;
    return option;
}

int main()
{
    int firstpick=init();
    if (firstpick == 'c'|| firstpick == 'C')
        std::cout<<"calculator\n";
    else if (firstpick == 'n' || firstpick == 'N')
        std::cout<<"Num gtenerator\n";
    else
        std::cout << "ERROR: Invalid answer to init\n";

    return 0;
}