我正在尝试将数据保存到数组中,再次重复使用,数据采用以下格式,并且是从1964年至2013年,这只是一个片段,任何帮助都会很棒,欢呼。
a b c d e f
1964 9 20.5 8.8 0 37.4
1964 10 13.6 4.2 5 77.8
1964 11 11.8 4.7 3 45.5
1964 12 7.7 0.1 17 65.1
1965 1 7.3 0.8 14 74.6
1965 2 6.5 0.1 13 3.3
到目前为止,这是我的代码所在:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
#include <vector>
#include <string>
struct Weather
{
int a;
int b;
double c;
double d;
int e;
double f;
double g;
};
int main()
{
std::vector<Weather> data_weather;
string line;
std::ifstream myfile ("weatherdata.txt");
if (myfile.is_open())
{
while ( getline(myfile, line) )
{
std::istringstream buffer(line);
int a_d, b_d, c_d, d_d, e_d, f_d, g_;
buffer >> a >> b >> c >> d >> e >> f >> g;
data_weather.push_back(Weather());
data_weather.back().a = a_d;
data_weather.back().b = b_d;
data_weather.back().c = c_d;
data_weather.back().d = d_d;
data_weather.back().e = e_d;
data_weather.back().f = f_d;
data_weather.back().g = g_d;
cout << line << endl;
}
myfile.close();
}
else
cout << "unable to open file";
scat::pause("\nPress <ENTER> to end the program.");
return 0;
}
答案 0 :(得分:2)
矢量用法示例..
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<double> student_marks(20);
for (vector<double>::size_type i = 0; i < 20; i++)
{
cout << "Enter marks for student #" << i+1
<< ": " << flush;
cin >> student_marks[i];
}
// ... Do some stuff with the values
return 0;
}
以下内容可以帮助您更好地理解......
答案 1 :(得分:1)
既然你没有告诉我们你遇到的问题是什么,我只能猜测。我注意到你正在阅读int
变量中的所有内容。
int year, mm, tmax, tmin, af, rain, sun;
buffer >> year >> mm >> tmax >> tmin >> af >> rain >> sun;
您的数据格式建议您需要浮点数据类型(至少tmax
,tmin
和rain
。)
sun
列也无法解析为int
(那里只有减号)。读入sun
变量将失败,因为您尚未初始化它,您将在此行中调用未定义的行为:
data_weather.back().sun = sun; // sun's value is indeterminate, reading it is UB
除非你绝对确定输入操作不会失败(在用户输入的情况下,实际上从来没有),我建议你养成检查成功的习惯:
if (!(buffer >> year >> mm >> tmax >> tmin >> af >> rain >> sun)) {
// something went wrong
}
答案 2 :(得分:0)
首先,您需要确保跳过前两行,因为它们不是数值。另外,正如另一个人所说的那样,请确保您为double
和double
读取了要作为int
显示的值的int
示例:
double value1, value2;
int value3, value4;
stream >> value1 >> value3 >> value 2 >> value 4;
接下来,您可以创建一个Weather
对象并将对象推送到向量中:
Weather objName = {year, month, tempmax, tempmin, airfrost, rain, sun};
data_weather.push_back(objName);
您可以vector[index]
或vector.at(index)
访问向量的每个元素。
您也可以用这种方式修改这些值:
data_weather[2].year = newYear;
要打印,您可以遍历矢量并打印出值:
for (auto it = data_weather.begin(); it != data_weather.end(); it++) {
cout << it.year << " " << it.month << endl; //Or any other values you want
答案 3 :(得分:0)
你做的方式有效。还有其他的方法,比如首先创建结构,用数据填充,然后推送:
Weather weather;
buffer >> weather.year >> weather.month
>> weather.tempmax >> weather.tempmin
>> weather.airfrost >> weather.rain >> weather.sun;
data_weather.push_back(weather);