使用struct的向量输出错误

时间:2019-01-31 12:16:27

标签: c++

没有语法错误,但是编译器最后给出了错误的数据! 怎么了 ?测试文件是一个简单的txt文件,在我的案例中有12个数据,每行依次列出12个数字:     122     135     148     156     178     189     256     114     125     136     630     360

int main(){

int a;
const int b = 4;

int Index = 0;
int Counter = 0;
char Heights[255];

ifstream input("Test.txt");

struct stru{
string Data[b];
};

stru sam;
vector<stru> event;

if(input.is_open()){
    while(input) {
    input.getline(Heights, 255);
        if(input) {
            Index = (int) Counter/b ;
            sam.Data[ Counter-(b*Index)] = Heights;
                if ( Counter%b == 0 ){
                event.push_back(sam);
                }
              Counter += 1;
        }
    }
cout <<"Event size: " << event.size() <<endl;

cout <<event[0].Data[11]<<'\n';
}
return 0;
}

“ event [0] .Data [0]”的结果必须为122正确! 但是另一方面,正如您在txt文件中看到的那样,最后一个数据是360,我希望“ event [0] .Data [11]”的结果为360,但这是错误的。输出显示114。怎么了?

1 个答案:

答案 0 :(得分:1)

如评论cout <<event[0].Data[11]<<'\n';所述,它具有未定义的行为,您的检查是错误的,最好将其替换为:

for (int i = 0; i != event.size(); ++i) {
  for (int j = 0; j != 4; ++j)
    cout << "event[" << i << "].Data[" << j << "] = " << event[i].Data[j] << endl;
}

这样做的结果是:

Event size: 3
event[0].Data[0] = 122
event[0].Data[1] = 
event[0].Data[2] = 
event[0].Data[3] = 
event[1].Data[0] = 178
event[1].Data[1] = 135
event[1].Data[2] = 148
event[1].Data[3] = 156
event[2].Data[0] = 125
event[2].Data[1] = 189
event[2].Data[2] = 256
event[2].Data[3] = 114

此外,我认为您对 Data 中的索引以及要推送 event 的管理非常奇怪

    while(input) {
    input.getline(Heights, 255);
        if(input) {
            Index = (int) Counter/b ;
            sam.Data[ Counter-(b*Index)] = Heights;
                if ( Counter%b == 0 ){
                event.push_back(sam);
                }
              Counter += 1;
        }
    }

必须替换为

while(input) {
  input.getline(Heights, 255);
  if(input) {
    sam.Data[Index] = Heights;
    if (++Index == b) {
      event.push_back(sam);
      Index = 0;
    }
  }
}
if (Index != 0)
  event.push_back(sam);

这样做的结果是:

Event size: 3
event[0].Data[0] = 122
event[0].Data[1] = 135
event[0].Data[2] = 148
event[0].Data[3] = 156
event[1].Data[0] = 178
event[1].Data[1] = 189
event[1].Data[2] = 256
event[1].Data[3] = 114
event[2].Data[0] = 125
event[2].Data[1] = 136
event[2].Data[2] = 630
event[2].Data[3] = 360