来自产生垃圾的文件的输入
Input from file producing garbage
我正在尝试编写一个程序来跟踪平均温度和降雨量。我有一个文本文件,每行有四个整数(每行代表一天),我想一次读取一行并每天处理每个变量。
问题是我似乎无法将文件值读入变量。当我将变量打印到屏幕上时,它只是打印垃圾。 PS。在下面的代码中,我尝试只处理文件的第一行。如何一次读取每一行?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string fileName = "metrolog.dta";
string buffer;
int numOfDays = 0,
dayNumber,
maxTemp,
minTemp,
rainfall,
tempDiff,
tempDiffMax,
totalMaxTemp,
totalMinTemp,
totalRainfall;
ifstream infile(fileName);
while(getline(infile, buffer))
if(!buffer.empty())
++numOfDays;
cout << "Number of entries: " << numOfDays << endl;
infile >> dayNumber >> minTemp >> maxTemp >> rainfall;
cout << dayNumber << " " << minTemp << " " << maxTemp << " " << rainfall << endl;
return 0;
}
文件如下所示:
1 9 12 23
2 8 9 20
3 7 13 18
4 8 10 15
5 7 13 10
6 6 9 8
7 5 8 12
8 4 10 6
9 3 9 12
10 4 7 6
问题是
while(getline(infile, buffer))
if(!buffer.empty())
++numOfDays;
一直读到文件末尾。然后在你下次阅读时
infile >> dayNumber >> minTemp >> maxTemp >> rainfall;
自从设置了 eof
标志后没有任何反应
cout << dayNumber << " " << minTemp << " " << maxTemp << " " << rainfall << endl;
打印出变量中的任何垃圾,因为您没有将它们初始化为任何特定变量。您需要将流指针重置回文件的开头。你可以用
infile.clear(); // clear error flags
infile.seekg(0, std::ios::beg); // set stream back to the beginning
另一种方法是读取文件并同时计算行数。你可以用
while (infile >> dayNumber >> minTemp >> maxTemp >> rainfall)
{
++numOfDays;
cout << dayNumber << " " << minTemp << " " << maxTemp << " " << rainfall << endl;
}
但这只有在您可以打印出列表后的条目数时才有效。
我正在尝试编写一个程序来跟踪平均温度和降雨量。我有一个文本文件,每行有四个整数(每行代表一天),我想一次读取一行并每天处理每个变量。
问题是我似乎无法将文件值读入变量。当我将变量打印到屏幕上时,它只是打印垃圾。 PS。在下面的代码中,我尝试只处理文件的第一行。如何一次读取每一行?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string fileName = "metrolog.dta";
string buffer;
int numOfDays = 0,
dayNumber,
maxTemp,
minTemp,
rainfall,
tempDiff,
tempDiffMax,
totalMaxTemp,
totalMinTemp,
totalRainfall;
ifstream infile(fileName);
while(getline(infile, buffer))
if(!buffer.empty())
++numOfDays;
cout << "Number of entries: " << numOfDays << endl;
infile >> dayNumber >> minTemp >> maxTemp >> rainfall;
cout << dayNumber << " " << minTemp << " " << maxTemp << " " << rainfall << endl;
return 0;
}
文件如下所示:
1 9 12 23
2 8 9 20
3 7 13 18
4 8 10 15
5 7 13 10
6 6 9 8
7 5 8 12
8 4 10 6
9 3 9 12
10 4 7 6
问题是
while(getline(infile, buffer))
if(!buffer.empty())
++numOfDays;
一直读到文件末尾。然后在你下次阅读时
infile >> dayNumber >> minTemp >> maxTemp >> rainfall;
自从设置了 eof
标志后没有任何反应
cout << dayNumber << " " << minTemp << " " << maxTemp << " " << rainfall << endl;
打印出变量中的任何垃圾,因为您没有将它们初始化为任何特定变量。您需要将流指针重置回文件的开头。你可以用
infile.clear(); // clear error flags
infile.seekg(0, std::ios::beg); // set stream back to the beginning
另一种方法是读取文件并同时计算行数。你可以用
while (infile >> dayNumber >> minTemp >> maxTemp >> rainfall)
{
++numOfDays;
cout << dayNumber << " " << minTemp << " " << maxTemp << " " << rainfall << endl;
}
但这只有在您可以打印出列表后的条目数时才有效。