C++读取文件后无输出问题求助及代码排查
问题分析与修复方案
嘿,我帮你揪出了几个导致程序没输出的关键问题,咱们一步步来捋清楚:
1. 致命的无限循环
你内层的while(i<=38)是个彻头彻尾的死循环!因为在这个while循环里,你完全没有修改i的值,程序会一直重复读取russ[i],永远跳不出来——后面的输出代码根本没机会执行,自然啥都看不到。而且这个while的位置也错得离谱,它不该嵌套在for循环的单次迭代里。
2. 文件被提前关闭
你把infile.close()放在了外层for循环的内部,这意味着第一次循环(i=0)执行完就把文件关掉了,后续所有的读取操作都会失败,数组里存的全是未初始化的垃圾值,就算能输出也不是你想要的内容。
3. 数组越界的隐形风险
russ数组只定义了38个元素,下标范围是0到37,但你用i<=38去访问russ[i],当i=38的时候就会触发数组越界,这会导致程序出现各种不可预测的行为(比如崩溃或者乱码)。
修正后的代码
假设你的data.txt格式是:前38行每行有三个数据(length、us、russ),剩下的10行只有前两个数据(length、us),我给你调整了读取逻辑:
#include<iostream> #include<cmath> #include<fstream> using namespace std; int main() { int length[48]; int us[48]; int russ[38]; // 下标0-37,对应前38组数据 ifstream infile; infile.open("data.txt"); if(infile.fail()) { cout << "error opening file" << endl; return 1; } // 读取前38行,每行三个数据 for(int i=0;i<38;i++) { infile >> length[i]; infile >> us[i]; infile >> russ[i]; } // 读取剩下的10行,每行两个数据 for(int i=38;i<48;i++) { infile >> length[i]; infile >> us[i]; } infile.close(); // 所有读取完成后再关闭文件 // 输出测试,验证读取结果 cout << "length数组内容:" << endl; for (int i = 0; i < 48; i++) { cout << length[i] << " "; } cout << endl; cout << "us数组内容:" << endl; for (int i = 0; i < 48; i++) { cout << us[i] << " "; } cout << endl; cout << "russ数组内容:" << endl; for (int i = 0; i < 38; i++) { cout << russ[i] << " "; } cout << endl; return 0; }
额外小建议
- 可以在每次读取后检查文件状态,比如用
if(!infile)来判断是否读取失败,避免因为文件格式错误导致数据异常。 - 固定大小数组不够灵活,C++里推荐用
vector来动态存储数据,能自动适配文件的行数,也能避免越界问题。
内容的提问来源于stack exchange,提问作者Onunez81
相关产品推荐
相关产品推荐

