C++日期计算程序ifstream无法从输入文件提取整数问题求助
故障原因
1 核心逻辑错误
菜单2的文件读取、写入逻辑存在严重的顺序和重复读取问题,完全符合你反馈的无内容输出的现象:
- 进入choice==2分支后,先执行了一次
inFile >> year >> month >> day读取第一行日期,随后while循环的判断条件又执行了一次读取操作,直接跳过第一行数据 - while循环体内额外多写了一次读取操作,会跳过后续所有奇数行的日期数据
- 如果输入文件仅包含1行日期,while循环的判断条件读取会直接触发文件结束标识,循环体完全不执行,因此没有任何内容写入输出文件
2 潜在编码问题
如果调整逻辑后仍然读取不到整数,大概率是输入文件编码问题:Windows记事本默认保存的txt文件是带BOM的UTF-8格式,开头3个字节的BOM标识不属于数字字符,会导致>>读取整数失败,变量保持初始的0值,和你提供的调试截图表现一致。
修复方案
第一步:调整菜单2的逻辑
将choice==2的代码替换为以下内容:
else if (choice == 2) { // 读取成功则处理,无需额外重复读取 while (inFile >> year >> month >> day) { newDay.setDate(year, month, day); // 写入输出文件,添加换行符避免内容挤成一行 outFile << "Your date: " << newDay.month << "/" << newDay.day << "/" << newDay.year << " is the weekday " << newDay.findWeekDay() << " and has a day value of " << newDay.findDayValue() << " (current day is inclusive) " << endl; } }
第二步:检查输入文件编码
打开dateInput.txt,选择【另存为】,编码选项选择ANSI或者UTF-8(不带BOM),保存后重新运行程序即可。
内容的提问来源于stack exchange,提问作者Adam Kostandy
相关产品推荐
相关产品推荐

