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

