C ++ - 如果声明问题。代码不会运行else,否则如果

时间:2017-06-02 11:23:22

标签: c++ if-statement

我将在下面输入我的代码。作为免责声明,我是一个完整而彻底的新手,我知道我的代码非常严格,我应该创建函数......现在我保持简单。

我的问题是我的if语句将运行" if"部分,但它不会运行"否则如果"部分。任何帮助表示赞赏。

我的代码:

// Coding Challenges.cpp : Defines the entry point for the console 
application.
//
#include "cstdlib"
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

char responses(char user_response)
{
return user_response;
}

int main()
{
char responses;
char user_response;
cout << "Welcome to the tempature conversion program." << endl;
cout << "Please type F to convert from farenheit to celcius or C for celcius 
to farenheit." << endl;
//getchar(user_response);
cin >> user_response;
getchar();
cout << "You entered: " <<user_response << endl;


switch (user_response) {
case 'F':
    cout << "You have chosen to convert from farenheit to celcius." << endl;
    break;

case 'C':
    cout << "You have chosen to convert from celcius to farenheit." << endl;
    break;

default:
    cout << "Woops. It Looks like you haven't entered correctly." << endl;
    break;
}
getchar();
cout << "Code should have ran " << endl;
getchar();
cout << "You entered: " << user_response << endl;
getchar();

if (user_response = 'F') {
    double f_val = 0;
    cout << "Please enter the value of farenheit you would like to convert: 
" << endl;
    cin >> f_val;
    cout << f_val;
    getchar();
    getchar();


} else if (user_response = 'C') {
    double c_val = 0;
    cout << "Please enter the value of celcius you would like to convert: " 
<< endl;
    cin >> c_val;
    cout << c_val;
    getchar();
    getchar();


} else {
    cout << "Error" << endl;
    return 0;
    getchar();
    getchar();
}
getchar();
getchar();

return 0;
}

忽略我明显用于测试/调试的任何代码。

谢谢,

泰德

3 个答案:

答案 0 :(得分:1)

您没有将user_response与其中的任何字符进行比较,因为您使用的是赋值运算符(=)而不是相等的比较运算符(==)。所以你总是输入你的第一个条件,因为你只是测试user_response是否与0不同,这就是你刚刚给它分配“F”的情况。在测试值时,您必须使用==而不是=。

if (user_response == 'F') { // == operator there, and not =
    double f_val = 0;
    cout << "Please enter the value of farenheit you would like to convert: 
" << endl;
    cin >> f_val;
    cout << f_val;
    getchar();
    getchar();


} else if (user_response == 'C') { // Same there
    double c_val = 0;
    cout << "Please enter the value of celcius you would like to convert: " 
<< endl;
    cin >> c_val;
    cout << c_val;
    getchar();
    getchar();


} else {
    cout << "Error" << endl;
    return 0;
    getchar();
    getchar();
}

答案 1 :(得分:1)

你的行

if (user_response = 'F') {

相当于

user_response = 'F';
if (user_response) {

相当于

user_response = 'F';
if (user_response != 0) {

您刚刚将user_response设置为&#39; F&#39;它显然不是0,所以你总是得到if-path。

如果你想比较你需要写

if (user_response == 'F') {

根据编译器的不同,您可以通过设置编译器的警告级别(总是一个好主意)并仔细阅读警告来捕获这些错误。

答案 2 :(得分:0)

你不是在发誓,而是在这里指定:

if (user_response = 'F')
                  ^------ This is assignment
                  v------ This is comparison
if (user_response == 'F') 

赋值的值可以转换为bool并生成true。大多数编译器都会发出警告。使用编译器错误捕获此类拼写错误的方法是将其写为:

    if ('F' = user_response)   //  -> compiler error !!
    if ('F' == user_response)  //  -> ok