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