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

C++读取文件整行字符串时Ciphertext为空的问题求助

解决读取文件行后Ciphertext为空的问题

嘿,我一眼就瞅到问题出在哪儿啦!你用while (!myfile.eof())控制循环的方式有坑,这就是最后Ciphertext变成空的根源。

问题分析

eof()函数的触发逻辑很容易踩坑:它只有在尝试读取并失败后才会返回true。具体到你的代码流程:

  1. 当读完文件最后一行时,myfile.eof()还是false,循环会继续执行
  2. 这时候再调用getline(myfile, Ciphertext),因为已经到文件末尾,读取失败,Ciphertext会被置为空字符串
  3. 之后循环才会退出,所以最后你的变量就成空的了

修正后的代码

正确的做法是直接把getline的返回值作为循环条件——getline返回的流对象在布尔判断中会自动检查读取是否成功:

#include<iostream>
#include<string.h>
#include<stdlib.h>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char **argv) {
    ifstream myfile("C:\\encr_affine.txt");
    string Ciphertext;
    // 读取成功才进入循环,完美避开eof的坑
    while (getline(myfile, Ciphertext)) {
        // 这里可以先加个打印验证是否读取到内容:
        // cout << "读取到行:" << Ciphertext << endl;
    }
    // 循环结束后,Ciphertext会保留最后一行的内容(如果文件非空)
    // some code here
    myfile.close();
}

额外小提示

如果你的需求是读取文件所有行,建议用vector<string>来存储每一行;如果只是要最后一行,上面的代码就刚好能满足~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:39:40