2013-09-10 6 views
0

Я пытаюсь создать простую программу, которая позволяет мне отображать общий балл после того, как пользователь ввел количество успешных ударов, totalHits, умножив этот вход с постоянной переменной POINTS в результате в другой переменной; score.Постоянная переменная, умноженная на пользовательский ввод

Я не думаю, что создание такой программы было бы проблемой, но, как обычно, я был неправ. Когда я запускаю программу score всегда случайный, даже если я ввожу '1', как totalHits каждый раз. Он может отличаться от 444949349 до -11189181, чтобы назвать несколько примеров. Я понятия не имею, что я сделал неправильно, поэтому было бы здорово, если бы кто-то мог бы дать мне ключ к пониманию того, что делать дальше :)

Вот код:

#include <iostream> 
using namespace std; 

int main() 
{ 
    const int POINTS = 50; 
    int totalHits; 
    int score = totalHits * POINTS; 

    cout << "Please enter the ammount of successful hits: "; 
    cin >> totalHits; 
    cout << "You hit " << totalHits << " targets, and your "; 
    cout << "score is " << score << " ." << endl; 

    cin.ignore(cin.rdbuf()->in_avail() + 2); 
    return 0; 
} 

Большое спасибо KerrekSB и Паддид за то, что он дал мне правильный ответ. Вот готовый код с комментариями:

#include <iostream> 
using namespace std; 

int main() 
{ 
    const int POINTS = 50; 
    int totalHits; 

    cout << "Please enter the ammount of successful hits: "; 
    cin >> totalHits; 
    cout << "You hit " << totalHits << " targets, and your "; 
    /*As you can see I moved the line below from the top of the code. 
    The problem was I had not properly learned how C++ executes the code. 
    The orignal code was written in a way that calculates `score` before 
    the user could decide it's value, resulting in a different total score than 
    it should have been. In the finished code, the user inputs what 
    value `totalHits` is, THEN score is calculated by using that value. */ 
    int score = totalHits * POINTS; 
    cout << "score is " << score << " ." << endl; 

    cin.ignore(cin.rdbuf()->in_avail() + 2); 
    return 0; 
} 
+2

C++ выполняются в порядке, одно заявление в то время. C++ является обязательным, а не декларативным. Вы хотели написать HTML? –

+0

@KerrekSB Eh, no: S Предполагается, что это программа на C++. Вы говорите, что я должен переместить некоторые из моих строк? – Rezic

+1

Да, хотя я должен сказать, что это очень странный вопрос. Я имею в виду, я могу видеть, о чем вы, возможно, думали, но это совсем не так, как работает C++: -S Один оператор за раз, и каждое утверждение последовательно изменяет состояние мира ... –

ответ

2
int totalHits; 
int score = totalHits * POINTS; 

Вы умножая неинициализированным переменным (totalHits)! Перед выполнением этого расчета вам необходимо применить значение totalHits.

Попробуйте использовать такой код: программы

const int POINTS = 50; 
int totalHits; 
int score; 

cout << "Please enter the ammount of successful hits: "; 
cin >> totalHits; 
cout << "You hit " << totalHits << " targets, and your "; 
score = totalHits * POINTS;     //totalHits has a value here 
cout << "score is " << score << " ." << endl; 

cin.ignore(cin.rdbuf()->in_avail() + 2); 
return 0; 
+0

В чем смысл переменной 'score'? –

+0

Чтобы сохранить счет игроков, я бы мог подумать. Да, вы могли бы просто «cout << (totalHits * POINTS)», но OP использовал его, поэтому я его сохранил. – Paddyd

+0

@Paddyd Исправить. Я также буду использовать 'score' позже, поэтому умножение каждого раза кажется, что это может стать утомительным. – Rezic

Смежные вопросы