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

C++足球比赛数组程序报错:>>运算符不匹配与常量值问题

解决基于数组的足球比赛程序编译错误

错误原因分析

1. cin >> jumlah_tim; 报错

static const int jumlah_tim; 声明了静态常量整数,常量的值必须在编译阶段确定,且一旦定义后无法修改。你试图通过cin给常量赋值,违反了常量的只读特性,因此编译器报错。

2. Tim tim[jumlah_tim]; 报错

标准C要求数组的大小必须是编译期常量,而jumlah_tim是运行时由用户输入的变量,这种变长数组(VLA)属于部分编译器的非标准扩展,不符合C标准,所以编译失败。

修正方案

推荐使用C++标准库的std::vector替代静态数组,它支持动态调整大小,完美适配用户输入的数量。同时调整变量声明,去掉不必要的static const修饰符:

修正后的完整代码

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct Tim {
  string nama_tim;
  int skor;
};

void tampilkan_hasil(const vector<Tim>& tim) {
  cout << "Hasil pertandingan: " << endl;
  for (size_t i = 0; i < tim.size(); i++) {
    cout << tim[i].nama_tim << ": " << tim[i].skor << " gol" << endl;
  }
}

void tentukan_pemenang(const vector<Tim>& tim) {
  size_t index_tim_pemenang = 0;
  for (size_t i = 0; i < tim.size(); i++) {
    if (tim[i].skor > tim[index_tim_pemenang].skor) {
      index_tim_pemenang = i;
    }
  }
  cout << "Pemenangnya adalah " << tim[index_tim_pemenang].nama_tim << endl;
}

int main() {
  int jumlah_tim;
  cout << "Masukkan jumlah tim: ";
  cin >> jumlah_tim;

  vector<Tim> tim(jumlah_tim);

  for (int i = 0; i < jumlah_tim; i++) {
    cout << "Masukkan nama tim ke-" << i + 1 << ": ";
    cin >> tim[i].nama_tim;
    cout << "Masukkan skor tim ke-" << i + 1 << ": ";
    cin >> tim[i].skor;
  }

  tampilkan_hasil(tim);
  tentukan_pemenang(tim);

  return 0;
}

关键改动说明

  • 将jumlah_tim改为普通整数变量,允许用户输入赋值。
  • 用std::vector替代静态数组,支持动态大小,完全符合C++标准。
  • 函数参数改为const vector<Tim>&,避免不必要的对象拷贝,提升运行效率。
  • 使用vector::size()获取元素数量,让函数不再依赖外部变量,逻辑更独立。

备选方案(不使用vector)

如果不想用vector,可以用动态内存分配实现,但需要手动管理内存避免泄漏:

// 替代vector的动态数组写法
Tim* tim = new Tim[jumlah_tim];

// 使用完成后必须释放内存
delete[] tim;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:25:25