You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:57:04