我想用C ++计算文本文件中数据的总和和平均值

时间:2015-05-31 07:48:56

标签: c++

我想用C ++计算文本文件中数据的总数和平均值 这是我的代码和文本文件。 此代码未在运行中显示任何内容

#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>

using namespace std;

string double2string(double);
double string2double(string);

int main(int argc, char* argv[]){

fstream dfile;  

string s1;
string amount;
double damount;
double sum = 0;


dfile.open(argv[1]);


    dfile >> amount;

    damount = string2double(amount);

    while(damount){

    sum = sum + damount;

}

string total = double2string(sum);


dfile.clear();

dfile.close();

cout << total; 

return 0;
}

将字符串转换为double并将double转换为字符串

的函数
string double2string(double d){
ostringstream outstr; 
outstr << setprecision(2) << fixed << setw(10) << d; 
return outstr.str(); 
};

double string2double(string s1){ 
istringstream instr(s1); 
double n; 
instr >> n; 
return n; 
}

这是我的文本文件&#34; data.txt&#34;

  234
  456
  789

1 个答案:

答案 0 :(得分:0)

您需要使用while循环。你只读了一行,所以你需要确保你一直读到行直到文件的结尾。

此外,您可能希望使用标准库函数:std::stoi是适用于std::string的C ++ 11及更高版本,std::atoi来自<cstdlib>std::string.c_str()一样有效。

#include <iostream>
#include <fstream>
#include <string>

//Compile with C++11; -std=c++11
int main(int argc, char** argv) {
    std::fstream file;

    //Open the file
    file.open(argv[1]);
    std::string buffer = "";
    int sum = 0;
    int n = 0;

    //Check for file validity, and keep reading in line by line.
    if (file.good()) {
        while (file >> buffer) {
            n = std::stoi(buffer);
            sum += n;
        }

        std::cout << "Sum: " << sum << std::endl;
    } else {
        std::cout << "File: " << argv[1] << "is not valid." << std::endl;
    }

    return 0;
}