C++ Do while循环输入N后无法正常跳出问题求助
故障根因及修复方案
1. 循环无法跳出的核心错误
你写的while条件逻辑存在语法错误:
// 原错误写法 while(input != 'N' && 'n');
C++中字符常量'n'的ASCII值非0,会被永远判定为true,所以整个循环条件永远成立,不管输入什么都不会跳出循环。
正确的条件写法有两种可选:
- 按你原代码的判断逻辑,需明确两次判断都和input比较:
while(input != 'N' && input != 'n'); - 更符合代码注释要求的写法(仅当用户输入Y/y时继续循环):
while(input == 'Y' || input == 'y');
2. 其他隐藏问题修复
- 多余的
cin.ignore()调用:getline()执行时会自动读取并丢弃换行符,你在每次getline()之后额外加的cin.ignore()会吞掉后续用户输入的第一个字符,造成输入错位,仅保留cin >> input之后的一次ignore()即可。 - 代码执行顺序错误:你把
return 0写在了inputAddress.close()之前,会导致文件关闭逻辑永远无法执行,写入的数据可能无法正常落盘,需要把return 0移到main函数最后一行。
修正后完整代码
#include<iostream> #include<fstream> #include<string> using namespace std; const string ADDRESS_FILE_NAME = "Address.csv"; int main() { string name; string street; string city; string state; string zip; char input; ofstream inputAddress(ADDRESS_FILE_NAME); do{ cout << "Enter name: " << endl; getline(cin, name); cout << "Enter street name: " << endl; getline(cin, street); cout << "Enter city: " << endl; getline(cin, city); cout << "Enter state: " << endl; getline(cin, state); cout << "Enter zip code: " << endl; getline(cin, zip); // 按注释要求完成CSV写入逻辑 inputAddress << name << "," << street << "," << city << "," << state << "," << zip << endl; cout << "Enter another address? (Y/N)" << endl; cin >> input; cin.ignore(); }while(input == 'Y' || input == 'y'); inputAddress.close(); return 0; }
内容的提问来源于stack exchange,提问作者Nick Ronkartz
相关产品推荐
相关产品推荐

