Программа гистограммы ведет себя странно

Я должен сделать программу для класса, которая отображает одну звезду на каждые три градуса для каждой температуры, считываемой из входного файла. Я думаю, что все в порядке, код компилируется. Однако когда я запускаю его, у меня возникает несколько проблем:

1) когда я запускаю его, не нажимая ctrl + f5 в коделите, он сразу выходит, даже если у меня есть «return 0»; в конце.

2) консоль показывает только звезды, возможно, для половины чисел, остальные пустые.

3) числа не совпадают, хотя я установил их одинаковую ширину в цикле.

Вот что я вижу, когда использую Ctrl + F5: http://imgur.com/w6jqPp5

Вот мой код:

#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

int main() {

//declare variables for input/loops
string graphLine = " | ";
int tempCount = 0;
int tempStars;
int tempValue;
int printedStars;

//Title
cout << "Welcome to the Hourly Temperature Bar-Graph Maker 1.0!" << endl;

//read input file, name it "tempData"ifstream tempData;
tempData.open("temperatures.txt");

//display error if the input file read failed
if(!tempData) {
cout << "ERROR: The input file could not be read." << endl;
return 0;
}

cout << "Temperatures for 24 hours(each asterisk represents 3 degrees): " << endl;
//print the temperature range(horizontal label for graph)
cout << "-30        0       30      60      90      120" << endl;

//read a temperature, output the bar for each temperature
while (tempCount < 24) {

//read in temperature value
tempData >> tempValue;

//distinguish between negative and positive temperatures
if(tempValue >= 0) {
tempStars = tempValue/3;
cout << tempValue << setw(5) << graphLine;

//print the appropriate number of asterisks for the temperature
while (printedStars < tempStars) {
cout << '*';
printedStars++;
}
cout << endl;
}

//print the stars before the line
else {
tempStars = tempValue/3;

while (printedStars < tempStars) {
cout << '*';
printedStars++;
}
cout << tempValue << setw(5) << graphLine << endl;
}

tempCount++;

}

tempData.close();
return 0;

}

0

Решение

Программа только что закончила нормально — сделайте вызов cin.getline или другой входной вызов, если хотите, чтобы он дождался. Или запустите его через отладчик и установите точку останова в строке возврата 0.

Вы не инициализируете и не сбрасываете printStars, прежде чем использовать его. Положил printedStars = 0; перед вашей звездой печатает петли.

Переместить setw(5) бит в cout вызывает перед значением, поэтому значение выводится с шириной 5.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]