2016-02-17 194 views
1

我没有编程经验,我正在一类称为介绍C++工程师。我们目前正在学习如何使用else语句,并且为什么我的程序没有正确执行以及我犯了什么错误,我一直坚持了几天。使用多个如果C++ else语句

我需要创建一个计算并显示一个任期内采取两班的GPA的程序。我还没有学习循环,所以我需要硬编码两个类的计算和输入。问题是,当我为两个类输入任何等级信件时,它总是将第一个if语句视为在两种情况下都是真实的。

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 

    double gpa, qualityPoints, qualityPoints1, qualitypointsTotal, totalCredits, credits, credits1; 
    double cqPoints, cqPoints1; 
    char grade, grade1; 

    cout << "Grade Point Average Calculator" << endl << endl; 

    cout << "Enter the grade letter received for the first class: " << endl; 
    cin >> grade; 

    if (grade = 'A') 
    { 
     qualityPoints = 4.0; 
    } 
    else if (grade = 'B') 
    { 
     qualityPoints = 3.0; 
    } 
    else if (grade = 'C') 
    { 
     qualityPoints = 2.0; 
    } 
    else if (grade = 'D') 
    { 
     qualityPoints = 1.0; 
    } 

    else if (grade = 'F') 
    { 
     qualityPoints = 0.0; 
    } 

    else 
    { 
     cout << "Invalid Letter Grade" << endl; 
    } 

    cout << "How many credit hours was the class worth?" << endl; 
    cin >> credits; 

    cqPoints = qualityPoints * credits; 

    cout << "Enter the grade letter received for the second class: " << endl; 
    cin >> grade1; 

    if (grade1 = 'A') 
    { 
     qualityPoints1 = 4.0; 
    } 
    else if (grade1 = 'B') 
    { 
     qualityPoints1 = 3.0; 
    } 
    else if (grade1 = 'C') 
    { 
     qualityPoints1 = 2.0; 
    } 
    else if (grade1 = 'D') 
    { 
     qualityPoints1 = 1.0; 
    } 
    else if (grade1 = 'F') 
    { 
     qualityPoints1 = 0.0; 
    } 

    else 
    { 
     cout << "Invalid Letter Grade" << endl; 
    } 
    cout << "How many credit hours was the class worth?" << endl; 
    cin >> credits1; 

    cqPoints1 = qualityPoints1 * credits1; 

    totalCredits = credits + credits1; 

    cout << "Total credit hours earned this term: " << totalCredits << endl; 

    qualitypointsTotal = cqPoints + cqPoints1; 

    gpa = qualitypointsTotal/totalCredits; 

    cout << "Your GPA for this term is: " << gpa << endl; 


    cout << "Credits: " << credits << endl; 
    cout << "Credits1: " << credits1 << endl; 
    cout << "qualityPoints: " << qualityPoints << endl; 
    cout << "qualityPoints1: " << qualityPoints1 << endl; 
    cout << "cqPoints: " << cqPoints << endl; 
    cout << "cqPoints1: " << cqPoints1 << endl; 
    cout << "qualitypointsTotal: " << qualitypointsTotal << endl; 
    cout << "totalCredits: " << totalCredits << endl; 
    return 0; 

} 

我很清楚,有更有效的方法可以做到这一点,但现在我刚学的基础知识,所以我将不胜感激保持相关课程的范围答案。

谢谢!

编辑:我想这可能是必要提及的是我的理解是双不需要的变量。在节目结束时,我也不需要操纵或任何cout。我只是想弄清楚出了什么问题。 :-)

+2

等于'=='不是'='。修复并重试。 – NathanOliver

+1

打开所有编译器警告。你可能打算写'if(grade =='A')'等 –

+0

非常感谢,我不能相信修正那么简单。我觉得我好笨。 – DiddyMoe

回答

1

那是因为你正在使用的赋值操作符,“=”,而不是运营商相比,“==”,在你的if语句。所以你没有比较Grade,你正在分配它。

有几种方法来减少这类问题。一种是尽可能地将变量声明为'const';这会将不需要的分配标记为错误。另一种方法是反转if语句中的变量和字面值(即if('A'== Grade)),它具有相同的效果。

另外,如果你打开所有的编译器警告,你可能只得到这样的警告,以及。当然,这取决于你的编译器。

+0

非常感谢您的回答和答复,我不敢相信我犯了一个极端的错误,并不知道这是问题所在。它现在运行得像黄油一样流畅,我终于准备好了基本程序。现在我需要弄清楚如何显示最低等级。我想知道我是否需要使用更多的陈述...无论如何,非常感谢! – DiddyMoe