C++ 使用结构的向量时输出错误
没有语法错误,但编译器在最后给出了错误的数据! 怎么了?测试文件是一个简单的txt文件,在我的例子中有12个数据,12个数字在每行中逐一列出: 122 135 148 156 178 189 256 114 125 136 630 三百六十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
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