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
相关产品推荐
相关产品推荐

