Чтение и суммирование чисел из файла

C++C++Beginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы научимся считывать числа из файла, а затем суммировать их построчно, выводя результаты в другой файл. Следуя шагам этого руководства, вы научитесь писать программу на C++, которая:


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/ControlFlowGroup(["Control Flow"]) cpp/BasicsGroup -.-> cpp/strings("Strings") cpp/ControlFlowGroup -.-> cpp/while_loop("While Loop") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/user_input("User Input") cpp/IOandFileHandlingGroup -.-> cpp/files("Files") cpp/StandardLibraryGroup -.-> cpp/string_manipulation("String Manipulation") cpp/StandardLibraryGroup -.-> cpp/standard_containers("Standard Containers") subgraph Lab Skills cpp/strings -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} cpp/while_loop -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} cpp/output -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} cpp/user_input -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} cpp/files -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} cpp/string_manipulation -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} cpp/standard_containers -.-> lab-96163{{"Чтение и суммирование чисел из файла"}} end

Создайте новый файл на C++

Создайте новый файл с именем file_sum.cpp в каталоге ~/project.

touch ~/project/file_sum.cpp

Подключите необходимые библиотеки

Для работы с файлами в C++ нам нужно подключить библиотеки <iostream> и <fstream> в нашей программе. Добавьте следующий код в файл file_sum.cpp:

#include <iostream>
#include <fstream>

using namespace std;

Запросите у пользователя имя файла

Мы попросим пользователя ввести имя файла. Добавьте следующий код в файл file_sum.cpp:

int main()
{
    char fileName[50];
    cout << "Enter file name: ";
    cin.getline(fileName, 50);
    ifstream inFile(fileName);
    ofstream outFile("sum.txt");
    string line;
}

Здесь мы объявляем массив fileName типа char, чтобы хранить имя файла, которое введет пользователь. Затем мы просим пользователя ввести имя файла и сохраняем его в массив fileName. Наконец, мы создаем объект ifstream для открытия входного файла inFile и объект ofstream для создания выходного файла outFile. Также мы объявляем строку line, которая будет использоваться для хранения каждой строки входного файла.

Прочитайте файл и просуммируйте числа

Теперь мы напишем код для чтения файла и суммирования чисел в каждой строке. Для каждой строки в файле мы будем читать числа с использованием объекта stringstream, суммировать их и записывать сумму в выходной файл. Добавьте следующий код в файл file_sum.cpp:

while (getline(inFile, line))
{
    int sum = 0;
    stringstream ss(line);
    int num;
    while (ss >> num)
    {
        sum += num;
    }
    outFile << sum << endl;
}

Здесь мы используем цикл while для чтения каждой строки входного файла, сохраняя строку в строковой переменной line. Затем мы инициализируем переменную sum значением 0, создаем объект stringstream под названием ss, который хранит содержимое каждой строки. Затем мы извлекаем каждое число из stringstream в переменную num и увеличиваем переменную sum на каждое число. После обработки всех чисел в строке мы записываем sum в выходной файл outFile.

Закройте файлы и уведомите пользователя

Наконец, нам нужно закрыть входной и выходной файлы и сообщить пользователю, что файл был обработан. Добавьте следующий код в файл file_sum.cpp:

inFile.close();
outFile.close();
cout << "File processed successfully." << endl;
return 0;

Скомпилируйте и запустите код

Скомпилируйте код из файла file_sum.cpp с использованием следующей команды:

g++ file_sum.cpp -o file_sum

Запустите код с использованием следующей команды в терминале:

./file_sum

Вам будет предложено ввести имя файла, который вы хотите обработать. Введите имя и нажмите Enter. Программа прочитает файл, просуммирует числа по строкам и запишет результаты в новый файл с именем sum.txt.

Полный код

Вот полный код файла file_sum.cpp:

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

using namespace std;

int main()
{
    char fileName[50];
    cout << "Enter file name: ";
    cin.getline(fileName, 50);
    ifstream inFile(fileName);
    if (!inFile)
    {
        cerr << "Unable to open file" << endl;
        return -1;
    }
    ofstream outFile("sum.txt");
    string line;

    while (getline(inFile, line))
    {
        int sum = 0;
        stringstream ss(line);
        int num;
        while (ss >> num)
        {
            sum += num;
        }
        outFile << sum << endl;
    }

    inFile.close();
    outFile.close();
    cout << "File processed successfully." << endl;
    return 0;
}

Резюме

В этом практическом занятии мы узнали, как читать файл, суммировать его числа по строкам и записывать результаты в другой файл с использованием стандартных библиотек C++ <iostream> и <fstream> и класса stringstream. Теперь вы должны быть в состоянии обрабатывать файлы и использовать многие из основных операций с файлами в своих программах на C++.