2014-09-22 2 views
-3

을 사용하여 txt 파일의 값을 가져옵니다.배열의 평균 값을 찾을 수

함께 숫자를 평균 싶습니다. 그래서 나는이 일을하고있다.

int size = 0; 
double sum = 0; 


for (int i = 0; i < size; ++i) 
{ 
    sum += data[i].getQuantity(); 
} 
double avg = ((double)sum)/size; //or cast sum to double before division 

std::cout << avg << '\n'; 

return 0; 

나는 평균이이다. 나는 내가해야한다고 생각한다 atod 그러나 나는 이것을 정확하게 구현할 수 없다. 로 나누어 때문에 나는 getQuantity

#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <string> 
#include <vector> 
#include <iterator> 

struct Input 
{ 
    friend std::istream& operator >>(std::istream& inp, Input& item); 
    friend std::ostream& operator <<(std::ostream& outp, Input const& item); 

    std::string group; 
    float total_pay; 
    unsigned int quantity; 

    Input() : group(), total_pay(), quantity() 
    { 
    } 

    Input(std::string groupIn, float total_payIn, unsigned int quantityIn) : 
    group(std::move(groupIn)), 
    total_pay(total_payIn), 
    quantity(quantityIn) 
    { 
    } 

    std::string const& getGroup() const { return group; } 
    float getTotalPay() const { return total_pay; } 
    unsigned int getQuantity() const { return quantity; } 
}; 

std::istream& operator >>(std::istream& inp, Input& item) 
{ 
    return (inp >> item.group >> item.total_pay >> item.quantity); 
} 

std::ostream& operator <<(std::ostream& outp, Input const& item) 
{ 
    outp 
    << item.getGroup() << ' ' 
    << item.getTotalPay() << ' ' 
    << item.getQuantity(); 
    return outp; 
} 


int main() 
{ 
    std::ifstream infile("input.txt"); 
    if (!infile) 
    { 
     std::cerr << "Failed to open input file" << '\n'; 
     exit(EXIT_FAILURE); 
    } 

    std::vector<Input> data; 
    std::string line; 
    while (std::getline(infile, line)) 
    { 
     std::istringstream iss(line); 
     Input inp; 
     if (iss >> inp) // calls our extaction operator >> 
      data.push_back(inp); 
     else 
      std::cerr << "Invalid input line: " << line << '\n'; 
    } 

    std::copy(data.begin(), data.end(), 
       std::ostream_iterator<Input>(std::cout,"\n")); 

    std::cout << data[2].getQuantity(); 


    int size = 0; 
    double sum = 0; 


    for (int i = 0; i < size; ++i) 
    { 
     sum += data[i].getQuantity(); 
    } 
    double avg = ((double)sum)/size; 

    std::cout << avg << '\n'; 

    return 0; 
} 
+2

[MCVE] (http://stackoverflow.com/help/mcve)를 게시하십시오. 당신이 올린 코드에서'size'는'0'입니다. 그렇게하면 효과가 없을 것입니다. – juanchopanza

+0

파일 읽기는 어디에서하고 getQuantity의 정의는 무엇입니까? – Christophe

+0

내 코드를 추가했습니다. ok 아까 사이즈의 값을 변경하고 그것이 작동하는지 확인하십시오. 그러나 반복 할 때마다 크기에 1을 더하지 않아야합니까? – wuno

답변

1

변경

int size = 0; 

size_t size = data.size(); 

에 그래서 당신은 size에 올바른 값, 시간의 루프 정확한 수를 설정 한 다음 정확한 숫자 대신 0으로 나눕니다.

+0

나에게 3 명의 사람이 나 자신의 인생에서 시간을내어 아래로 투표하는 것은 나에게 훌륭하다. 도와 줘서 고마워. – wuno

1

당신은이 프로그램에 0에 의해 분할되어 내부에 저장된 값의 평균을 보려면 여기를 누락하고있는 무슨이 항상 프로그램에 ERROR

됩니다 0은 단순히 불가능합니다.