You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++读取data.txt并计算存储至newData.txt技术求助

嘿,你已经迈出了第一步——成功读取文件内容啦!接下来要完成计算薪资并写入新文件的需求,这里给你一些实用的参考方向和具体的实现建议:

一、核心知识点参考

这些都是C++标准库内置的功能,不用额外找外部资源,直接查对应库的用法就行:

  • 文件写入操作:重点掌握<fstream>里的ofstream类,它和你已经在用的ifstream用法类似,用来创建并写入文件。
  • 结构化数据读取:你的数据是每组4个元素(名、姓、薪资、涨幅百分比),与其逐词读取,不如直接按组读取四个值,这样逻辑更清晰,效率也更高。
  • 数值计算细节:注意整数除法的坑!比如涨幅是5代表5%,计算时要转成0.05再和薪资相乘,不然整数除法会得到0,结果就错了。

二、修改后的完整代码示例

我把你的代码扩展成了能完成全部需求的版本,注释很详细,你可以直接参考:

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <iomanip> // 如果需要控制小数精度的话
using namespace std;

int main() {
    const string inputFilename = "data.txt";
    const string outputFilename = "newData.txt";
    
    // 打开输入文件
    ifstream infile(inputFilename);
    if (!infile.is_open()) {
        cerr << "无法打开输入文件 " << inputFilename << endl;
        exit(EXIT_FAILURE);
    }
    
    // 打开输出文件
    ofstream outfile(outputFilename);
    if (!outfile.is_open()) {
        cerr << "无法创建输出文件 " << outputFilename << endl;
        infile.close(); // 记得关闭已打开的输入文件
        exit(EXIT_FAILURE);
    }
    
    string firstName, lastName;
    int salary, increment;
    // 按组读取数据:>> 会自动跳过空格、换行等空白字符
    while (infile >> firstName >> lastName >> salary >> increment) {
        // 计算更新后的薪资:把涨幅百分比转成小数
        double updatedSalary = salary * (1 + increment / 100.0);
        
        // 写入新文件,这里用换行分隔每组数据,也可以换成逗号等分隔符
        // 如果需要控制小数位数,比如保留2位,可以加上 fixed 和 setprecision
        outfile << firstName << " " << lastName << " " 
                << fixed << setprecision(2) << updatedSalary << endl;
        
        // 可选:在控制台打印结果,方便验证
        cout << firstName << " " << lastName << " " 
             << fixed << setprecision(2) << updatedSalary << endl;
    }
    
    // 记得关闭文件,虽然程序结束时会自动关闭,但手动关闭是好习惯
    infile.close();
    outfile.close();
    
    cout << "处理完成!结果已经保存到 " << outputFilename << endl;
    system("pause");
    return 0;
}

三、额外的实用参考要点

  • 错误处理优化:如果想知道文件打不开的具体原因,可以用perror()函数(需要包含<cstdio>头文件),比如perror("打开输入文件失败");,它会输出更详细的系统错误信息。
  • 数据格式兼容性:不管你的data.txt里是一行存所有数据还是每行存一组,while(infile >> ...)的写法都能正常工作,因为>>操作符会自动跳过所有空白字符。
  • 精度控制:如果不需要小数,或者想调整小数位数,修改setprecision的参数就行,比如setprecision(0)就是整数形式。

内容的提问来源于stack exchange,提问作者gymcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:57