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

如何使用getline()接收多个字符串输入,解决无法触发第二次输入问题

问题根源

你遇到的问题核心和cin.getline()或者cin.ignore()无关,是代码里存在野指针的非法访问:

  • 你定义的Node *test只是一个指向Node类型的指针,没有给它分配实际存储Node对象的内存空间,直接访问test->str_1属于未定义行为,运行时会出现各种不可预期的异常,比如跳过输入、程序崩溃等。
最简修复方案

不需要用指针的场景下,直接在栈上创建Node对象即可,这对新手来说最安全,不需要手动管理内存:

#include <iostream>
#include <cstring>
using namespace std;

class Node{
    public:
        char str_1[25];
        char str_2[25];
};

int main(){
    // 改为栈上的对象,自动分配内存
    Node test;
    cout << "Str_1: ";
    cin.getline(test.str_1, 25);
    cout << "Str_2: ";
    cin.getline(test.str_2, 25);
    // 可以加输出验证结果
    cout << "\n输入的内容为:" << endl;
    cout << "str_1: " << test.str_1 << endl;
    cout << "str_2: " << test.str_2 << endl;
    return 0;
}
如果必须使用指针的写法

需要先给指针分配对应的堆内存,使用完后记得释放避免内存泄漏:

#include <iostream>
#include <cstring>
using namespace std;

class Node{
    public:
        char str_1[25];
        char str_2[25];
};

int main(){
    // 给指针分配Node大小的内存
    Node *test = new Node();
    cout << "Str_1: ";
    cin.getline(test->str_1, 25);
    cout << "Str_2: ";
    cin.getline(test->str_2, 25);
    cout << "\n输入的内容为:" << endl;
    cout << "str_1: " << test->str_1 << endl;
    cout << "str_2: " << test->str_2 << endl;
    // 释放内存
    delete test;
    return 0;
}
补充说明cin.ignore()的使用场景

只有当你之前用cin >> 变量这类不会吃掉输入末尾换行符的输入方式时,才需要在调用getline之前加cin.ignore()清空缓冲区残留的换行符,避免getline读到空内容。你当前的场景全程用getline接收输入,不需要加ignore语句。

内容的提问来源于stack exchange,提问作者Tanmay Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03