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

C++程序输入姓名时自动跳过输入行问题求助

C++字符串数组录入时自动跳过输入行的问题分析与修复

问题根源

你代码里用的cin >> names[i]是按**空白字符(空格、换行、制表符)**分割输入的:

  • 要是输入带空格的姓名(比如"John Smith"),第一次循环只会读走"John",剩下的"Smith"会被下一次循环直接读取,看起来就像跳过了输入提示
  • 如果输入时不小心多打了空格或者换行,这些空白内容会被后续循环自动拾取,导致输入流程异常

修复代码

要读取包含空格的完整姓名,改用getline(cin, names[i]),但注意第一次调用getline前要先忽略掉cin默认留下的换行符,否则会读入空行。另外别忘了释放动态分配的内存,避免内存泄漏:

#include<iostream>
#include<string>

using namespace std;

int main() {

    string* names = new string[10];
    for (int i=0; i<10; i++) {
        cout << "Person (" << i+1 << ") Enter name: " << endl;
        // 处理首次输入前的残留换行
        if (i == 0) {
            cin.ignore();
        }
        // 读取包含空格的完整姓名
        getline(cin, names[i]);
    }
    
    cout << "Welcome guests:" << endl;
    for (int i=0; i<10; i++) {
        cout << names[i] << endl;
    }

    // 释放动态数组内存
    delete[] names;

    return 0;
}

额外建议

  • 没必要用动态数组的话,直接声明string names[10];更简单,还不用手动管理内存
  • 如果需要更灵活的容器,推荐用vector<string>,比手动管理动态数组安全得多

内容的提问来源于stack exchange,提问作者Christopher Munoz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:16:16