Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使if-else语句与cin语句一起工作?_C++ - Fatal编程技术网

C++ 如何使if-else语句与cin语句一起工作?

C++ 如何使if-else语句与cin语句一起工作?,c++,C++,我目前正在为一个班级编写一个程序,其中包括一个具有附加功能的平均成绩计算器的代码。我的代码一直在运行,直到我添加了最后一行代码作为分数之和,以及随后的平均分。我觉得我在这里遗漏了一些明显的东西,但我现在不知所措。理想情况下,这个程序将在四个不同的点接受用户的输入,将输入相加,然后除以4(因为我目前的分数代码是4,但我计划在解决这个问题后增加这个数量) 最初,我会出错,因为我要求代码将double变量转换为char变量,然后再转换回double变量(错误代码C4244)。我还更改了代码的结尾,将所

我目前正在为一个班级编写一个程序,其中包括一个具有附加功能的平均成绩计算器的代码。我的代码一直在运行,直到我添加了最后一行代码作为分数之和,以及随后的平均分。我觉得我在这里遗漏了一些明显的东西,但我现在不知所措。理想情况下,这个程序将在四个不同的点接受用户的输入,将输入相加,然后除以4(因为我目前的分数代码是4,但我计划在解决这个问题后增加这个数量)

最初,我会出错,因为我要求代码将
double
变量转换为
char
变量,然后再转换回
double
变量(错误代码C4244)。我还更改了代码的结尾,将所有等级的总和声明为一个单独的变量,因为将其全部包含在一个变量中,
GPA
,导致程序输出一个看似随机的数字。后来我修改了代码,使其流动更加均匀,但是现在当我执行程序时,它会要求一年级的初始输入,然后跳过二年级、三年级和四年级

<>我对C++仍然非常陌生,所以我的代码可能过于复杂了,但是我被难住了。
    #include <iostream>
using namespace std;

int GPAAndHonorsCalculator;

int main()
{
    //Declaring initial values
    double A = 4.0;
    double B = 3.0;
    double C = 2.0;
    double D = 1.0;
    double F = 0.0;
    double GPA = 0.0;

    //Created if else statements to handle user input and translation into data for the program to use.
    cout << "Please enter your first grade: " << endl;
    double gradeOne = 0.0;
    cin >> gradeOne;
    if (gradeOne == 'A') {
        gradeOne = 4.0;
    }
    else if (gradeOne == 'B') {
        gradeOne = 3.0;
    }
    else if (gradeOne == 'C') {
        gradeOne = 2.0;
    }
    else if (gradeOne == 'D') {
        gradeOne = 1.0;
    }
    else if (gradeOne == 'F') {
        gradeOne = 0.0;
    }

    cout << "Please enter your second grade: " << endl;
    double gradeTwo = 0.0;
    cin >> gradeTwo;
    if (gradeTwo == 'A') {
        gradeTwo = 4.0;
    }
    else if (gradeTwo == 'B') {
        gradeTwo = 3.0;
    }
    else if (gradeTwo == 'C') {
        gradeTwo = 2.0;
    }
    else if (gradeTwo == 'D') {
        gradeTwo = 1.0;
    }
    else if (gradeTwo == 'F') {
        gradeTwo = 0.0;
    }

    cout << "Please enter your third grade: " << endl;
    double gradeThree = 0.0;
    cin >> gradeThree;
    if (gradeThree == 'A') {
        gradeThree = 4.0;
    }
    else if (gradeThree == 'B') {
        gradeThree = 3.0;
    }
    else if (gradeThree == 'C') {
        gradeThree = 2.0;
    }
    else if (gradeThree == 'D') {
        gradeThree = 1.0;
    }
    else if (gradeThree == 'F') {
        gradeThree = 0.0;
    }

    cout << "Please enter your fourth grade: " << endl;
    double gradeFour = 0.0;
    cin >> gradeFour;
    if (gradeFour == 'A') {
        gradeFour = 4.0;
    }
    else if (gradeFour == 'B') {
        gradeFour = 3.0;
    }
    else if (gradeFour == 'C') {
        gradeFour = 2.0;
    }
    else if (gradeFour == 'D') {
        gradeFour = 1.0;
    }
    else if (gradeFour == 'F') {
        gradeFour = 0.0;
    }
    int gradeSum = gradeOne + gradeTwo + gradeThree + gradeFour;
    GPA = gradeSum / 4;
    cout << GPA;
}
#包括
使用名称空间std;
int GPA和荣誉计算器;
int main()
{
//声明初始值
双A=4.0;
双B=3.0;
双C=2.0;
双D=1.0;
双F=0.0;
双GPA=0.0;
//创建if-else语句以处理用户输入并将其转换为程序使用的数据。
一级考试;
如果(一级=='A'){
一级=4.0;
}
否则,如果(一级=='B'){
一级=3.0;
}
否则,如果(一级=='C'){
一级=2.0;
}
否则,如果(一级=='D'){
一级=1.0;
}
否则,如果(一级=‘F’){
一级=0.0;
}
二年级;
如果(二级=='A'){
二级=4.0;
}
否则,如果(二级=='B'){
二级=3.0;
}
否则,如果(二级=='C'){
二级=2.0;
}
否则,如果(二级=='D'){
二级=1.0;
}
否则,如果(二级=‘F’){
二级=0.0;
}
三年级;
如果(三年级=‘A’){
三年级=4.0;
}
否则,如果(三年级=='B'){
三年级=3.0;
}
否则如果(三年级=‘C’){
三年级=2.0;
}
否则如果(三年级=='D'){
三年级=1.0;
}
否则如果(三年级=‘F’){
三年级=0.0;
}
四年级;
如果(四年级=‘A’){
四年级=4.0;
}
否则,如果(四年级=='B'){
四年级=3.0;
}
否则,如果(四年级=‘C’){
四年级=2.0;
}
否则,如果(四年级=='D'){
四年级=1.0;
}
否则如果(四年级=‘F’){
四年级=0.0;
}
int gradeSum=一年级+二年级+三年级+四年级;
GPA=成绩总和/4;
cout用户等级;
交换机(用户级){
案例“A”:{
等级价值=等级价值+4;
++成绩计数;
打破
}

我对每个年级都重复了这个过程,效果很好!

首先,你使用变量a、B、C、D、F做什么?其次,你不能使用双类型变量来存储字符。只需使用一个char变量来获取输入年级,并相应地设置年级变量。此外,如果你计划添加更多这些年级,那么它将是您最好将其写入函数并反复调用(或将函数调用放入循环中),这样可以避免代码重复,并且代码总体上看起来更干净。

我之前评论过,但我想如果它能进一步帮助您,我会详细阐述一下

正如您已经发现的,您试图将字符存储在双变量中,这可能会破坏您的代码或产生一些严重的意外结果。与Javascript等语言不同,它有一个定义的类型,不能在编辑的代码中的
double
string
之间更改e您似乎已经解释了这一点,而且您的代码现在似乎运行得更好

值得注意的一点是,特别是在你似乎还在学习的时候,作为一名程序员,每当你编写与你已经编写的代码相同或非常相似的代码块时,你的头脑中就会发出一点内部警报。俗语说“干”或“不要重复你自己”非常流行是有原因的,它可以帮助您的代码更易于阅读、编写和编辑

对于您的示例,主函数包含您的所有逻辑,并且随着它越来越长,可能很难解释编写的代码中发生的情况。您的代码大致如下:

int main() {

//Declaring initial values, as well as initializing a counter for later loop.
int gradeValue = 0;
int gradeCount = 0;
char userGrade = 0;
double GPA = 0.0;

//Creating while loop with switch statement nested inside to handle large amounts of repeating code.
while (gradeCount!= 4) {
    cout << "Please enter a grade (A, B, C, D, or F): ";
    cin >> userGrade;

    switch (userGrade) {
        case 'A': {
            gradeValue = gradeValue + 4;
            ++gradeCount;
            break;
        }
        case 'B': {
            gradeValue = gradeValue + 3;
            ++gradeCount;
            break;
        }
        case 'C': {
            gradeValue = gradeValue + 2;
            ++gradeCount;
            break;
        }
        case 'D': {
            gradeValue = gradeValue + 1;
            ++gradeCount;
            break;
        }
        case 'F': { 
            ++gradeCount; // no need to add to value since F=0
            break;
        }
    }

    // logic to display GPA
    // TODO

更容易理解,对吧?在你的
getUserGrade()
函数中,你只需要使用switch语句逻辑并返回他们输入的等级的两倍值。我省略了显示GPA的逻辑,因为这是一个赋值,这部分由你来完成

有了这个更简单的框架,您可以轻松地调整代码,使其能够处理用户想要提供的任意多的分数输入。如果您只有一个选项,让用户在要求分数时键入“完成”或其他重要内容,您可以返回代码在
main()中输入的特殊值
可以用来知道何时停止输入(-1.0会起作用,因为这不是一个有效的GPA)。您的
main()
将如下所示:

int main() {
    // declare variables
    double gradeValue = 0.0;
    int gradeCount = 0;

    // get input
    while(gradeCount < 4) {
        gradeValue += getUserGrade(); // add grade to GPA
        gradecount++;
    }

    // logic to display GPA
    // TODO
}
int main() {
    // declare variables
    double gradeValue = 0.0;
    int gradeCount = 0;

    // get input
    while(true) {
        double usrInput = getUserGrade();

        if(usrInput == -1.0) break; // exit loop if user is done

        gradeValue += usrInput;
        gradecount++;
    }

    // logic to display GPA
    // TODO
}

只需更改几行代码,您现在就可以拥有一个更加灵活的程序了!

double
变量不用于保存字符。您应该将输入存储为
int main() {
    // declare variables
    double gradeValue = 0.0;
    int gradeCount = 0;

    // get input
    while(true) {
        double usrInput = getUserGrade();

        if(usrInput == -1.0) break; // exit loop if user is done

        gradeValue += usrInput;
        gradecount++;
    }

    // logic to display GPA
    // TODO
}