C++读取enable1.txt筛选单词输入参数后无输出问题求助
问题排查与解决方案
核心问题根因
你遇到的无输出问题由两个低级错误导致:
- 构造函数传参顺序颠倒:你定义的Words类构造函数形参顺序为
Words(int max, int min),但main函数中实例化对象时传入的参数顺序是Words words(min, max),这会使类内部的minlen被赋值为你输入的最大长度,maxlen被赋值为你输入的最小长度,当输入的min小于max时,长度筛选条件永远不成立,符合要求的单词计数count为0,pick_word方法直接返回空字符串,因此看不到输出。 - 文件名带有多余空格:代码中两处打开文件的路径都写为
"enable1.txt ",txt后缀后多了一个空格,如果你本地的词典文件名是无空格的enable1.txt,会直接导致文件打开失败,单词计数同样为0,返回空值。
此外你当前使用的while (!fin.eof())读取逻辑存在冗余,会多读一次空内容,但不属于本次无输出的核心原因。
修复方案
按以下步骤修改代码即可正常运行:
- 修正参数传递逻辑:将Words类的构造函数定义改为符合常规习惯的参数顺序:
// 修改前:Words(int max, int min) Words(int min, int max) { minlen = min; maxlen = max; count_candidates(); load_words(); }
- 移除文件名后的多余空格,将两处打开文件的代码修改为:
fin.open("enable1.txt");
- (可选优化)调整文件读取逻辑,避免eof判断的冗余问题:
// 把原来的while (!fin.eof()) + getline逻辑替换为以下写法 string word; while (getline(fin, word)) { if (word.length() >= minlen && word.length() <= maxlen) { count++; // 统计数量时的逻辑,加载单词时对应修改为存入数组即可 } }
内容的提问来源于stack exchange,提问作者WyRm ACEN H08
相关产品推荐
相关产品推荐

