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

如何用PrintNodeData()输出shoppingList内容?C++链表问题求助

修正C++链表输入与输出的代码问题

原代码存在的问题

  • 输入结束判断逻辑错误:错误尝试通过字符ASCII值判断输入是否为"-1",实际应直接对比字符串内容
  • 链表遍历方式错误:std::list不支持随机访问,不能用下标[]访问元素
  • 成员函数调用错误:调用PrintNodeData时未加括号,无法触发函数执行
  • 类实现代码不完整:ListItem.cpp中PrintNodeData函数缺少闭合大括号

修正后的完整代码

main.cpp

#include "ListItem.h"
#include <string>
#include <list>
#include <iostream>
using namespace std;

int main()
{
    list<ListItem> shoppingList;
    string item;

    // 读取输入直到输入"-1"结束
    do
    {
        getline(cin, item);
        if (item == "-1")
            break;
        shoppingList.push_back(ListItem(item));
    } while (true);

    // 遍历链表并打印每个元素
    // 方式1:使用迭代器遍历
    for (list<ListItem>::iterator it = shoppingList.begin(); it != shoppingList.end(); ++it)
    {
        it->PrintNodeData();
    }

    // 方式2:C++11及以上可用范围for循环
    // for (auto& listItem : shoppingList)
    // {
    //     listItem.PrintNodeData();
    // }

    return 0;
}

ListItem.cpp

#include "ListItem.h"
#include <iostream>

ListItem::ListItem() {
    item = "";
}

ListItem::ListItem(string itemInit) {
    item = itemInit;
}

void ListItem::PrintNodeData() {
    cout << item << endl;
} // 补充缺失的闭合大括号

ListItem.h(无需修改)

#ifndef LISTITEMH
#define LISTITEMH

#include <string>

using namespace std;

class ListItem {
public:
    ListItem();
    ListItem(string itemInit);
    void PrintNodeData();
private:
    string item;
};

#endif

关键修正说明

  1. 输入判断逻辑:将原错误的item[item.length()-1] == -1改为item == "-1",直接判断输入字符串是否为结束标记
  2. 链表遍历:使用std::list的迭代器或范围for循环遍历元素,适配链表的双向访问特性,避免随机访问的错误
  3. 函数调用:确保调用成员函数时添加括号PrintNodeData(),正确触发函数执行
  4. 代码完整性:补充ListItem.cpp中PrintNodeData函数的闭合大括号,修复编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:45:33