从文件中读取并求和数字

C++C++Beginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将学习如何从文件中读取数字,然后逐行求和,并将结果输出到另一个文件中。通过本教程的步骤,你将学习如何编写一个 C++ 程序来实现以下功能:


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("`C++`")) -.-> cpp/BasicsGroup(["`Basics`"]) cpp(("`C++`")) -.-> cpp/ControlFlowGroup(["`Control Flow`"]) cpp(("`C++`")) -.-> cpp/IOandFileHandlingGroup(["`I/O and File Handling`"]) cpp(("`C++`")) -.-> cpp/StandardLibraryGroup(["`Standard Library`"]) 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++ 文件

~/project 目录下创建一个名为 file_sum.cpp 的新文件。

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 来存储用户输入的文件名。然后提示用户输入文件名并将其存储在 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,并创建一个名为 ssstringstream 对象来存储每行的内容。接着,我们从 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

你将被提示输入要处理的文件名。输入文件名并按回车键。程序将读取文件,逐行求和,并将结果写入名为 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++ 程序中处理文件并使用许多基本的文件操作。

您可能感兴趣的其他 C++ 教程