(这是我关于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。
答案 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”检查的条件是:
firstpick == 'c'
和'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;
}