条形图程序表现奇怪

时间:2014-03-28 05:20:30

标签: c++ graph temperature

我必须为一个类创建一个程序,从输入文件中读取每个温度,每三度显示一个星。我想我做得很好,代码编译。但是,当我实际运行它时,我遇到了一些问题:

1)当我在没有按下codelite中的ctrl + f5的情况下运行它时它立即退出,即使我有'返回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;

}

1 个答案:

答案 0 :(得分:0)

程序正常完成 - 如果你想让它等待,可以调用cin.getline或其他一些输入调用。或者通过调试器运行它并在返回0行上放置一个断点。

在使用之前,您不会初始化或重置printStars。将printedStars = 0;放在星形打印循环之前。

将cout调用中的setw(5)位移到值之前,因此输出宽度为5的值。