C++文件读取代码if判断分支未生效,无法输出预期data[4]值如何解决?
问题解决方法
核心错误点
- 条件判断类型不匹配:
data[2]是字符类型,第二行对应存储的值为字符'2'(ASCII码为50),你直接和整数2对比,条件永远不成立,所以不会走输出data[4]的分支。 - 循环判断逻辑缺陷:
while(!file.eof())会在文件读取结束后多执行一次循环,可能输出无效垃圾值。 - 固定长度字符数组存在缓冲区溢出风险,读取内容超过20字节时会触发内存越界问题。
修改后可直接运行的代码
#include <iostream> #include <fstream> #include <string> using namespace std; int main(){ fstream file; file.open("file.txt", ios::in); if(file.is_open()){ // 改用std::string存储读取内容,避免缓冲区溢出 string data; // 直接用流对象作为循环判断条件,自动处理读取结束逻辑 while(file >> data) { // 对比对象改为字符'2',匹配类型 if('2' == data[2]) cout << data[4] << endl; else cout << data[2] << endl; } } file.close(); return 0; }
运行效果
修改后输出完全符合你的预期:
1 K 3 4 5
内容的提问来源于stack exchange,提问作者Sezkente
相关产品推荐
相关产品推荐

