Я должен сделать программу для класса, которая отображает одну звезду на каждые три градуса для каждой температуры, считываемой из входного файла. Я думаю, что все в порядке, код компилируется. Однако когда я запускаю его, у меня возникает несколько проблем:
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;
}
Программа только что закончила нормально — сделайте вызов cin.getline или другой входной вызов, если хотите, чтобы он дождался. Или запустите его через отладчик и установите точку останова в строке возврата 0.
Вы не инициализируете и не сбрасываете printStars, прежде чем использовать его. Положил printedStars = 0;
перед вашей звездой печатает петли.
Переместить setw(5)
бит в cout вызывает перед значением, поэтому значение выводится с шириной 5.
Других решений пока нет …