2014-09-09 2 views
-3

Таким образом, код as is будет запущен, однако вычисления для общей и средней переменных вычисляются, когда переменные firstE-4thE равны 0. Несомненно, есть способ переопределить их позже в коде или пересчитать их? Я прошу прощения за ужасное форматирование и отступы, этот сайт очень разборчив.Как определить переменную или пересчитать ее позже в коде?

#include <iostream> 
using namespace std; 
int main() 
{ 
    char fi = '\0', mi = '\0', li = '\0', end = '\0'; 
    float firstE = 0, 
     secondE = 0, 
     thirdE = 0, 
     fourthE = 0, 
     total = firstE + secondE + thirdE + fourthE, 
     average = total/4; 

    cout << "This program will calculate the average of a student's exam grades." << endl; 
    cout << "Please enter the first initial of the student's name: "; 
    cin >> fi; 
    cout << "Please enter the middle initial of the student's name: "; 
    cin >> mi; 
    cout << "Please enter the last initial of the student's name: "; 
    cin >> li; 
    cout << "Please enter the student's first exam score: "; 
    cin >> firstE; 
    cout << "Please enter the student's second exam score: "; 
    cin >> secondE; 
    cout << "Please enter the student's third exam score: "; 
    cin >> thirdE; 
    cout << "Please enter the student's fourth exam score: "; 
    cin >> fourthE; 

    /*float total = firstE + secondE + thirdE + fourthE, 
     average = total/4;*/ 

    cout << "Student's initials: " << fi << mi << li << endl; 
    cout << "Exam 1: " << firstE << endl; 
    cout << "Exam 2: " << secondE << endl; 
    cout << "Exam 3: " << thirdE << endl; 
    cout << "Exam 4: " << fourthE << endl; 
    cout << "Total: " << total << endl; 
    cout << "Average: " << average << endl; 
    cin >> end; 
} 
+0

Похоже, все, что вам нужно сделать, это * не * переопределить переменные, а просто вычислить раскомментировав код расчета, убирая 'float' декларации и отделив точкой с запятой (';') вместо запятой ... – abiessu

+1

Я бы посоветовал пройти несколько учебных пособий на C++, прежде чем писать больше кода. [Попробуйте это] (http://www.learncpp.com/) – TartanLlama

+0

Удалите 'total' и' average' из первого блока объявлений и раскомментируйте код с комментариями. – molbdnilo

ответ

0

Чтобы получить желаемое поведение из вашего кода, вам нужно вычислить общее и средних после ваших материалов были заселенными. Если предположить, что классы целых значений, вы можете использовать int S для хранения каждого результата экзамена:

#include <iostream> 

int main() 
{ 
    char fi = '\0', mi = '\0', li = '\0', end = '\0'; 
    int firstE = 0, 
     secondE = 0, 
     thirdE = 0, 
     fourthE = 0, 

    /*IO*/ 

    float average = (firstE + secondE + thirdE + fourthE)/4; 

    /*IO*/ 

    return 0; 
} 

Это даст вам рабочий код.

Мы можем очистить его дальше, хотя. Почему мы не сможем сохранить начальные значения John Edward Smith как "JES" вместо ввода каждого символа отдельно?

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string student_initials; 
    int firstE = 0, 
     secondE = 0, 
     thirdE = 0, 
     fourthE = 0, 

    std::cout << "This program will calculate the average of a student's exam grades." << endl; 
    std::cout << "Please enter the student's initials: "; 
    std::cin >> student_initials; 
    /*MORE IO*/ 

    float average = (firstE + secondE + thirdE + fourthE)/4; 

    std::cout << "Student's initials: " << student_initials << std::endl; 
    /*MORE IO*/ 

    return 0; 
} 

Это лучше, интерфейс для пользователя немного проще. Но что, если студент сделал дополнительный экзамен? Что делать, если они взяли только 3? Либо вы не можете ввести все свои результаты, либо математика ошибочна. Мы можем ввести цикл в код, который может обрабатывать ввод результатов:

#include <iostream> 
#include <string> 
#include <sstream> 

int main() 
{ 
    /* STUFF */ 

    int total; 
    int exam_result; 
    int exam_count = 1; 
    string input; 

    //this loop will capture multiple exam results (safely) 
    do 
    { 
     std::cout << "Please enter the results of exam #" << exam_count \ 
        << "\nleave blank if all results have been entered" << std::endl; 
     std::getline (std::cin, input); 
     stringstream(input) >> exam_result; 
     if (exam_result) 
     { 
      total += exam_result; 
      exam_count++; 
     } 
    } while (exam_result); 

    float average = total/exam_count; 

    /* STUFF */ 

    return 0; 
} 

это захватывает несколько результатов экзамена (и итоги и подсчитывает их), используя безопасный метод обработки CIN Это однако мешает вам от печати каждого отдельного результата до среднего, но вы можете сохранить их в std::vector и прореживать через них, чтобы сделать это. Я оставлю это до вас.

Окончательный код:

#include <iostream> 
#include <string> 
#include <sstream> 

int main() 
{ 
    std::string student_initials; 

    std::cout << "This program will calculate the average of a student's exam grades." << endl; 
    std::cout << "Please enter the student's initials: "; 
    std::cin >> student_initials; 
    int total; 
    int exam_result; 
    int exam_count = 1; 
    string input; 

    //this loop will capture multiple exam results (safely) 
    do 
    { 
     std::cout << "Please enter the results of exam #" << exam_count \ 
        << "\nleave blank if all results have been entered" << std::endl; 
     std::getline (std::cin, input); 
     stringstream(input) >> exam_result; 
     if (exam_result) 
     { 
      total += exam_result; 
      exam_count++; 
     } 
    } while (exam_result); 

    float average = total/exam_count; 

    std::cout << "Student's initials: " << student_initials << std::endl; 
    cout << "Total: " << total << endl; 
    cout << "Average: " << average << endl; 

    return 0; 
} 
2

Почему вы делаете расчеты ПЕРЕД вы даже получили значение, чтобы сделать расчеты с? Ваша кодовая последовательность должна быть:

1. define variables 
2. get input from user 
3. do calculations 
4. present results 

Вы пытаетесь съесть свой пирог, прежде чем вы даже пошли в магазин, чтобы купить яйца/молоко/сахар, не говоря уже о смешивании/выпечки его.

+0

Это мой вопрос, как бы я это сделал? Могу ли я определить общие и средние переменные после того, как я получу вход пользователя? Я новичок в C++, а мой родной язык - это python. Также у моего профессора очень толстый средний восточный акцент, который иногда трудно понять. – YourPalAl

+0

ну, если вы хотите, чтобы «B» произошло после «A», тогда вы не записываете свой код «B-> A». Вы пишете его «A-> B». C++ (и Python, и любой другой язык, о котором вы хотели бы подумать) НЕ способны путешествовать во времени. вы делаете свои расчеты, прежде чем у вас есть значения для вычисления. Поэтому переставьте код, чтобы время поездки не требовалось. –

+0

@MarcB, это не так, в Python вы можете просто «включить TimeTravel» – TartanLlama

0

Как определить переменную или пересчитать ее позже в коде?

Как это

#include <iostream> 

int main() 
{ 
    int a; // define it once 
    int b; // define it once 
    int c; // define it once 

    int total; // define it once 

    a = 2; // change its value 
    b = 4; 
    c = 1; 

    total = a + b + c; // or calculate its value 

    std::cout << "total: " << total << '\n'; 

    a = 9; // change its value AGAIN 
    b = 1; 
    c = 12; 

    total = a + b + c; // and calculate its value AGAIN 

    std::cout << "total: " << total << '\n'; 
} 
Смежные вопросы