下标值不是数组

时间:2017-10-31 06:01:53

标签: c++ arrays c++11

我正在尝试将前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;
}

1 个答案:

答案 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 >> datefin >> 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]