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

关于C++类中counter变量与循环变量i关系的技术疑问

Shop类中counter与循环变量i的运行逻辑解释

我们一步步拆解代码的执行流程,就能明白为什么counter大于i但程序输出正确:

1. counter的初始化与三次set_price的执行过程

  • 首先调用initiate_counter(),把counter设置为0,这是第一个物品的下标起始值。
  • 第一次调用set_price():
    • 用当前counter(0)作为下标,把输入的ID和价格存入Item_ID[0]和Item_price[0]。
    • 执行counter++,此时counter变成1。
  • 第二次调用set_price():
    • 用当前counter(1)作为下标,存入Item_ID[1]和Item_price[1]。
    • counter++后变成2。
  • 第三次调用set_price():
    • 用当前counter(2)作为下标,存入Item_ID[2]和Item_price[2]。
    • counter++后变成3。

此时counter的值是3,它代表的是已经添加的物品总数,而不是最后一个物品的下标。

2. display_price的循环逻辑

display_price()里的循环条件是for (int i = 0; i < counter; i++):

  • 此时counter是3,所以i会依次取0、1、2这三个值,正好对应之前存入物品的下标(0、1、2)。
  • 循环会遍历所有已存储的物品,输出它们的ID和价格,完全匹配之前三次set_price()存入的数据,所以结果正确。

核心逻辑总结

counter在这里的作用是双重的:

  • 作为存储新物品时的数组下标(每次存完就自增,指向下次存储的位置)。
  • 统计已添加的物品总数(最终值等于物品数量)。

因为数组下标从0开始,最后一个物品的下标是counter - 1,所以用i < counter作为循环条件,刚好能遍历所有已存储的元素,这是非常典型的“下标计数+总数统计”的写法。

你的完整代码

#include <iostream>
using namespace std;
class Shop
{
    int Item_ID[100];
    int Item_price[100];
    int counter;

public:
    void initiate_counter()
    {
        counter = 0;
    };
    void set_price();
    void display_price();
};
void Shop ::set_price()
{
    cout << "Enter the ID of the item  " << counter + 1 << endl;
    cin >> Item_ID[counter];
    cout << "Enter the price of the item : " << endl;
    cin >> Item_price[counter];
    counter++;
}
void Shop ::display_price()
{
    for (int i = 0; i < counter; i++)
    {
        cout << "The price of the time with ID " << Item_ID[i] << " is " << Item_price[i] << endl;
    }
}
int main()
{
    Shop dukaan;
    dukaan.initiate_counter();
    dukaan.set_price();
    dukaan.set_price();
    dukaan.set_price();
    dukaan.display_price();

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:21:27