C++ 使用结构的向量时输出错误

C++ 使用结构的向量时输出错误,c++,C++,没有语法错误,但编译器在最后给出了错误的数据! 怎么了?测试文件是一个简单的txt文件,在我的例子中有12个数据,12个数字在每行中逐一列出: 122 135 148 156 178 189 256 114 125 136 630 三百六十 intmain(){ INTA; 常数int b=4; int指数=0; int计数器=0; 字符高度[255]; ifstream输入(“Test.txt”); 结构构造{ 字符串数据[b]; }; 斯特鲁萨姆; 向量事件; if(input.is_ope

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

intmain(){
INTA;
常数int b=4;
int指数=0;
int计数器=0;
字符高度[255];
ifstream输入(“Test.txt”);
结构构造{
字符串数据[b];
};
斯特鲁萨姆;
向量事件;
if(input.is_open()){
while(输入){
输入.getline(高度,255);
如果(输入){
索引=(int)计数器/b;
sam.Data[计数器-(b*索引)]=高度;
如果(计数器%b==0){
事件。推回(sam);
}
计数器+=1;
}
}

cout正如在备注
中所说,我可以推荐您吗?我很确定您的结构中没有
数据[11]
是否设置过。尤其是当结构中的数组长度为
4
时。没有语法错误——这与程序是否能正确运行无关。程序可能仍然存在逻辑错误。确实,数组长度为4,但在下一步我使用向量时,我能传达我的意思吗?
事件[0]。数据[11]
是未定义的行为。任何事情都可能发生。包括114的输出。@burno——就是这样。Ty mate.:X@burno--再次感谢:x@burno---为什么
事件[0]。数据[11]
存在,而
数据[b]
之前声明的成员只有
4
成员?正如我所预料的
数据[11]
不应存在,但它确实存在,并按原样显示最后一个
360
!!!@AA360c访问
事件[0]。数据[11]
无效,您退出
事件[0].Data
,结果是未指定的,这并不是因为您似乎能够访问它,这才是有效的。@burno——作为我的最后一个问题,我们所说的“未定义的行为”或“未指定”到底是什么意思?好的,如果编译器不能理解它或其他任何东西,它必须显示一个错误,Idk,除了真值以外的其他东西。在我的例子中,它准确地显示了真值。即使我用512甚至更多的数据号测试它,它也能正常工作!!!
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;
}
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