如何在输入文件数据耗尽时终止C++程序中的while循环?
解决文件读取耗尽时提前终止while循环的问题
要在文件数据耗尽时立即终止循环,核心是检查输入操作的状态——当cin无法读取更多数据时(比如文件结束),它的状态会变为失败,我们可以利用这一点来终止循环。
修改后的代码
#include<iostream> using namespace std; #define max 20 int main() { string arr[max][4]; int i=0, j; while(i<max) { bool readComplete = true; for(j=0; j<4; j++) { // 读取时直接检查是否成功 if(!(cin >> arr[i][j])) { readComplete = false; break; } if(j==2) arr[i][1] = arr[i][1]+arr[i][2]; } // 如果某次读取失败(文件耗尽或格式错误),终止外层循环 if(!readComplete) { break; } i++; } return 0; }
关键逻辑说明
cin >> arr[i][j]会返回cin对象本身,当读取失败时(比如文件已读完),这个对象在布尔语境下会被解析为false,我们用!(cin >> arr[i][j])捕获这个状态。- 一旦读取失败,标记
readComplete为false并跳出内层for循环,随后外层while循环也会终止,不会继续执行i++,实现提前终止的需求。 - 这种方式不仅能处理文件耗尽的情况,还能处理其他输入错误(比如数据格式不匹配),鲁棒性更强。
使用方式
运行程序时通过重定向读取文件即可:
./your_program < data.txt
内容的提问来源于stack exchange,提问作者Deba
相关产品推荐
相关产品推荐

