w3resource

C++ File handling: Calculate average of numbers in a file

C++ File handling: Exercise-15 with Solution

Write a C++ program to calculate the average of numbers stored in a file.

Sample Solution:

C Code:

#include <iostream>   // Including the input/output stream library
#include <fstream>    // Including the file stream library
#include <string>     // Including the string handling library

// Function to display the content of a file
void displayFileContent(const std::string &filename) {
  std::ifstream file(filename); // Open file with given filename for reading
  std::string line; // String to store each line of the file

  if (file.is_open()) { // Check if the file was successfully opened
    std::cout << "File content:" << std::endl; // Displaying a message indicating file content
    while (std::getline(file, line)) { // Read each line from the file
      std::cout << line << std::endl; // Display each line of the file
    }
    file.close(); // Close the file
  } else {
    std::cout << "Failed to open the file." << std::endl; // Display an error message if file opening failed
  }
}

// Function to calculate the average of numbers from a file
double calculateAverage(const std::string &filename) {
  std::ifstream file(filename); // Open file with given filename for reading
  double sum = 0.0; // Variable to store the sum of numbers
  double count = 0.0; // Variable to count the numbers

  if (file.is_open()) { // Check if the file was successfully opened
    double number; // Variable to store each number read from the file

    while (file >> number) { // Read each number from the file
      sum += number; // Add the number to the sum
      count++; // Increment the count of numbers
    }

    file.close(); // Close the file
  } else {
    std::cout << "Failed to open the file." << std::endl; // Display an error message if file opening failed
    return 0.0; // Return 0.0 if file opening failed
  }

  if (count > 0) { // Check if numbers were found in the file
    return sum / count; // Return the average of the numbers
  } else {
    std::cout << "No numbers found in the file." << std::endl; // Display a message if no numbers were found
    return 0.0; // Return 0.0 if no numbers were found
  }
}

int main() {
  std::string filename = "sample.txt"; // File containing numbers
  displayFileContent("sample.txt"); // Display content of "sample.txt"
  std::cout << std::endl; // Output a newline for formatting

  double average = calculateAverage(filename); // Calculate the average of numbers in the file
  std::cout << "Average: " << average << std::endl; // Display the calculated average
  return 0; // Return 0 to indicate successful execution
}

Sample Output:

File content:
100
200
300
500
600

Average: 340 

Explanation:

In the above exercise,

  • The calculateAverage() function takes a filename and reads the numbers from the file using std::ifstream. It maintains a running sum of the numbers and a count of how many numbers are read.
  • The program checks if the file has been successfully opened. If so, it reads each number from the file and updates the sum and count variables accordingly.
  • After reading all the numbers, the file is closed.
  • If the count is greater than 0, the average is calculated by dividing the sum by the count.
  • If no numbers are found in the file, an appropriate message is displayed, and the average is set to 0.

Note: Content of a file is displayed using displayFileContent("filename.txt").

Flowchart:

Flowchart: Calculate average of numbers in a file.

CPP Code Editor:

Contribute your code and comments through Disqus.

Previous C++ Exercise: Reading and displaying CSV file in tabular form.

What is the difficulty level of this exercise?



Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/cpp-exercises/file-handling/cpp-file-handling-exercise-15.php