2015-08-15 55 views
-3

我不知道我在做什么错在这里,每次我运行它时,它会通过if部分,即使它不是真的?所以'其他'从未运行。如果声明运行时即使不是真的

#include <iostream> 
using namespace std; 

string choice; 
float numb; 

float convert(float numb,string choice) 
{ 
    float newNo; 
    if (choice == "F" or "f"){ 
     newNo = numb * 0.2 * 9 + 32; 
    }else{ 
     newNo = (numb - 32)/1.8; 
    } 
    return newNo; 
} 

int main() 
{ 
    cout << "welcome to Temperature converter v0.1" << endl; 
    cout << endl; 
    cout << "Which conversion would you like to use?" << endl; 
    cout << "type C to convert to Celsius and F to convert to Fahrenheit - "; 
    cin >> choice; 
    cout << "what number would you like to convert? - "; 
    cin >> numb; 

    cout << convert(numb,choice); 


    return 0; 
} 
+1

'if(choice ==“F”or“f”){'不会做你认为的事情。编写有效的C++语法以从您的代码中获得预期的行为。 –

+1

正如@πάνταῥεῖ所说的,你误解了“if”语句中符号的语法和含义。您需要阅读比较和运算符优先级。提示,“f”总是如此。 –

+0

'=='运算符出现在'或'运算符之前,因此它与'if((choiceOfF“)或(”f“))'相同。字符串'“f”',被评估为布尔值,总是为真,因为它不是NULL指针(可能没有完美解释,但或多或​​少) – hoijui

回答

4

的问题是你的if声明:

if (choice == "F" or "f"){ 

基本上,你在这里说的是: 如果选择是“F”或者“f”。您需要了解:除零之外,所有内容均为真(0)。 "f"不是零,所以它是真的。你也可以WIRTE(or = ||):

if (coice == "F" || true) 

这是相同的,如:

if (true) 

因此,为了使你的代码工作,你需要:

if (choice == "f" || choice == "F") 

那会做你的期望。

+0

非常感谢!即时通讯仍然如此新,所以,也许我应该再次询问之前了解更多,谢谢。 –

+0

有没有愚蠢的问题。只要你在代码中显示出一些努力并且有问题,在这里一切都很好。即使它是一个初学者的问题。只是不说“为我工作”的问题... – Nidhoegger

0

更改这个if语句

if (choice == "F" or "f"){ 

以下

if (choice == "F" or choice == "f"){ 

否则操作or

"f" 

的右操作数始终是EQU人到真正的,因为它转换为字符串文字的第一个字符的地址显然是不等于0

那是你的原始状态的if语句看起来像

if (choice == "F" or "f" != nullptr){ 

确实"f" != nullptr

2

'if'语句的语法存在问题。以下是更正的代码,其中'||'代表'或':

if ((choice == "F") || (choice=="f")){ 
    newNo = numb * 0.2 * 9 + 32; 
}else{ 
    newNo = (numb - 32)/1.8; 
}