2015-05-31 1 views
1

Я хочу рассчитать общее и среднее количество данных из текстового файла с помощью 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; 
} 

функции для преобразования строки в двойных и двойной строки

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; 
} 

Вот мой текстовый файл «data.txt»

234 
    456 
    789 
+0

Добро пожаловать в StackOverflow. Вы пытались запустить свой код? Он возвращает какие-либо ошибки? – mjuarez

+1

'while (damount) {sum = sum + damount; } '- бесконечный цикл. –

+0

Было бы проще просто прочитать числа как числа, а не строки, которые преобразуются в числа. –

ответ

0

Вам нужно использовать цикл while. Вы читаете только одну строку, поэтому вам нужно убедиться, что вы продолжаете читать строки до конца файла.

Кроме того, вы можете использовать стандартную библиотечную функцию: std::stoi является версией C++ 11 и далее, что работает для std::string, но 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; 
} 
Смежные вопросы