C++读取文件整行字符串时Ciphertext为空的问题求助
解决读取文件行后Ciphertext为空的问题
嘿,我一眼就瞅到问题出在哪儿啦!你用while (!myfile.eof())控制循环的方式有坑,这就是最后Ciphertext变成空的根源。
问题分析
eof()函数的触发逻辑很容易踩坑:它只有在尝试读取并失败后才会返回true。具体到你的代码流程:
- 当读完文件最后一行时,
myfile.eof()还是false,循环会继续执行 - 这时候再调用
getline(myfile, Ciphertext),因为已经到文件末尾,读取失败,Ciphertext会被置为空字符串 - 之后循环才会退出,所以最后你的变量就成空的了
修正后的代码
正确的做法是直接把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
相关产品推荐
相关产品推荐

