我必须为一个类创建一个程序,从输入文件中读取每个温度,每三度显示一个星。我想我做得很好,代码编译。但是,当我实际运行它时,我遇到了一些问题:
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;
}
答案 0 :(得分:0)
程序正常完成 - 如果你想让它等待,可以调用cin.getline或其他一些输入调用。或者通过调试器运行它并在返回0行上放置一个断点。
在使用之前,您不会初始化或重置printStars。将printedStars = 0;
放在星形打印循环之前。
将cout调用中的setw(5)
位移到值之前,因此输出宽度为5的值。