我需要创建一个程序,从文本文件中获取整数,并输出它们,包括数字,最小数字,最大数字,平均数,总数,N数字等。我可以做到这一点就好了下面的代码,但我还需要每行处理文本。我的示例文件有7个数字,每行标签分隔,总共8行,但我假设我不知道每行有多少个数字,每个文件的行数等等。
另外,尽管我知道如何使用向量和数组,但是我所知道的特定类还没有得到它们,所以我宁愿不使用它们。
感谢。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
int num;
int count = 0;
int total = 0;
int average = 0;
string str = "";
int numLines = 0;
int lowNum = 1000000;
int highNum = -1000000;
ifstream fileIn;
fileIn.open("File2.txt");
if (!fileIn) {
cout << "nError opening file...Closing program.n";
fileIn.close();
}
else {
while (!fileIn.eof()) {
fileIn >> num;
cout << num << " ";
total += num;
count++;
if (num < lowNum) {
lowNum = num;
}
if (num > highNum) {
highNum = num;
}
}
average = total / count;
cout << "nnTotal is " << total << "." << endl;
cout << "Total amount of numbers is " << count << "." << endl;
cout << "Average is " << average << "." << endl;
cout << "Lowest number is " << lowNum << endl;
cout << "Highest number is " << highNum << endl;
fileIn.close();
return 0;
}
}
答案 0 :(得分:0)
处理各个行的一种方法是在读取每个值之前跳过前导空格,并在到达换行符时将流设置为失败状态。跳过并读取值后,当流良好时,显然没有新行。如果有换行符,处理行末的任何需要,请重置流(如果失败不是由于达到eof()
)并继续。例如,循环处理整数和跟踪当前行的代码可能是这样的:
int line(1);
while (in) {
for (int value; in >> skip >> value; ) {
std::cout << "line=" << line << " value=" << value << '\n';
}
++line;
if (!in.eof()) {
in.clear();
}
}
此代码使用自定义操纵符skip()
,可以像这样实现:
std::istream& skip(std::istream& in) {
while (std::isspace(in.peek())) {
if (in.get() == '\n') {
in.setstate(std::ios_base::failbit);
}
}
return in;
}