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。怎么了?
解决方案
正如在备注中所说的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
推荐阅读
- list - 通过过滤器列表过滤元素列表
- python - 使用 Python 组织 API 数据
- java - 通过使用java合并两个不同的数组来排序数组的中位数
- uwp - 如何使 CarouselControl 的 ItemMargin 在 UWP 中自适应?
- reactjs - 反应中的功能 isloggedin 不起作用
- flutter - 在 Google Play 商店中使用 Flutter 应用进行应用内购买产品查询没有结果
- python-3.x - 生成 100 个随机数的列表,从中删除大于 20 且小于 50 的数字
- javascript - 我无法将必需的属性添加到选择标签
- excel - 将工作簿工作表中的数据提取到另一个工作簿工作表的同一列中
- c++ - QLineEdit 单击时清除文本并从按钮读取文本