首页 > 解决方案 > 使用结构向量时输出错误

问题描述

没有语法错误,但编译器最后给出了错误的数据!怎么了 ?测试文件是一个简单的 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。怎么了?

标签: c++

解决方案


正如在备注中所说的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

此外,我认为您对数据中索引的管理和推送事件非常奇怪

    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

推荐阅读