我正在尝试将前30个温度分配给June
数组,将下一个30分配给July
数组,将最后30个温度分配给August
数组。出于某种原因,它告诉我fin >> temp[June]
;是"下标值不是数组。"我知道我错过了一些东西,但我还是被困住了。在此先感谢您的帮助。
#include <iostream>
#include <fstream>
int main() {
using namespace std;
string file_name;
int June[30];
int July[30];
int August[30];
int temp;
string date;
const int days = 30;
string firstline;
cout << "please enter the file name" << endl;
cin >> file_name;
ifstream fin;
fin.open(file_name);
if (fin.fail())
{
cout << "Failed to open " << file_name << endl;
exit(1);
}
getline(fin, firstline);
for (int i = 0; i < days; i++)
fin >> date;
fin >> temp[June];
for (int j = 0; j < days; j++)
fin >> date;
fin >> temp[July];
for (int k = 0; k < days; k++)
fin >> date;
fin >> temp[August];
fin.close();
return 0;
}
答案 0 :(得分:0)
我无法重现你的&#34; Subscripted Value不是数组&#34;错误。
无论如何,我在代码中看到了一些可以连接(或不连接)的问题。
(1)如kkk所述,您使用temp
fin >> temp[June];
uninitialized
(2)查看你的代码,我怀疑你是一个Python程序员,因为你的for
是缩进的,这表明这是确定循环范围的缩进。我的意思是......当你写作
for (int k = 0; k < days; k++)
fin >> date;
fin >> temp[August];
我怀疑你认为从零到days-1
的循环都是在fin >> date
和fin >> temp[August]
上执行的。
错误。
在C / C ++中,for
的正文是以下声明(仅fin >> date
),如果您想在正文中添加更多声明,则必须将它们包含在{ }
之间。
所以我怀疑你的意图是
for (int i = 0; i < days; i++)
{
fin >> date;
fin >> temp[June];
}
for (int j = 0; j < days; j++)
{
fin >> date;
fin >> temp[July];
}
for (int k = 0; k < days; k++)
{
fin >> date;
fin >> temp[August];
}
(3)C中的运算符a[b]
(以及C ++中的指针和旧C +样式数组)是({定义为] *(a+b)
的语法糖。
因此,如果June
是一个数组,您可以无差别地写June[0]
或0[June]
。但通常使用June[0]
形式,0[June]
形式是一种优雅(IMHO)形式的混淆编码。一种危险的形式,因为当一个类定义operator[]
时,等价性就会丢失,只有第一个形式可用。
所以你的
fin >> temp[June];
技术上是正确的(据我所知并排除了temp
未初始化的事实),但我建议你写一下
fin >> June[temp];
或大概(由bob __观察)
fin >> June[i]