数组的值是随机变化的
Values of array randomly change
我有一个包含篮球运动员信息的文本文件它看起来像这样:
8
9 5 7 -5 13 -4 11
7 5 -3 12 -5 17 -3
25 7 12 -3 5 -5 7 -5 3
14 5 12 -3 10 -7 8
5 1 -40
33 5 15 -5 9 -3 8
11 5 -12 8 -5 12 -3
13 5 3 -4 25 -5 3
第一行的第一个整数表示有多少玩家。在每隔一行中,第一个整数是玩家的号码,第二个整数表示该行中还有多少个整数,接下来的每个整数表示玩家是在比赛(如果整数是正数)还是坐在板凳上(如果数字是负数)。
我想把信息读到一个结构体数组,它看起来像这样:
struct player
{
int nr;
int k;
int bus[];
};
我写了一个函数:
void skaitymas(int &n, player mas[])
{
ifstream duom("U1.txt");
duom >> n;
for (int i=0; i < n; i++) {
duom >> mas[i].nr >> mas[i].k;
for (int f=0; f < mas[i].k; f++) {
duom >> mas[i].bus[f];
}
}
}
当我运行它时,程序似乎可以工作,但是结构数组保存了意想不到的值。在随机添加一些cout
命令后,我发现它第一次保存正确的值到数组,第一次for循环循环,但经过一些迭代后,它改变了前面数组的值。例如,当For循环中的i
等于1
时,mas[1].bus[0]
被保存为-3
,这是应该的,但是当i
变为2
后,mas[1].bus[0]
变为25
。
如果你能帮我弄清楚,为什么数组中的数字会变成文本文件中的其他随机数,即使我没有对它们做任何事情,我也会很感激。
您的代码有几个问题。最明显的是int bus[]
声明了一个不完全类型的变量,在c++中声明成员变量是非法的不完整的类型。除非您的编译器严重损坏,否则不应该编译;最迟,您应该得到一个错误当你写mas[i]
,因为没有可能的方法做对指向不完整类型的指针进行指针运算。的方式
struct Player
{
int nr;
std::vector<int> bus;
};
这样做之后,应该就可以编译了。不过,这是非常糟糕的c++读取下列元素的计数。的正确的做法是删除计数文件:行数为玩家数,而行数行中第一个后面的整数个数就是这个数第一行后面的整数。如果你这样做,你会得到这样的结果:
std::vector<Player> skaitymas()
{
std::ifsteram duom( "U1.txt" );
if ( !duom.is_open() ) {
// Some sort of error handling, maybe an exception.
}
std::vector<Player> results;
std::string line;
while ( std::getline( duom, line ) ) {
std::istringstream s( line );
int nr;
s >> nr;
if ( !s ) {
// Format error...
}
results.push_back(Player{ nr });
while ( s >> nr ) {
results.back().bus.push_back( nr );
}
}
return results;
}
一切都是动态完成的(这在c++中非常简单)。
相关文章:
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- C++具有随机计数的数组
- 从C++数组中选择一个随机元素
- 为什么我的 2d 数组的第二行从 RAM 中获取随机值?
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 为什么我的数组值会更新为随机值?
- 在 c++ 的 10x10 数组中生成特定数量的多个随机字符
- SFINAE - 检测类型 T 是指针、数组还是带有随机访问运算符的容器,以及给定的值类型
- 选择随机字符串数组的排序
- 生成随机值数组而不重复
- 如何随机化数组
- 无输出和随机字符串数组
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- C++随机字符串数组不起作用
- 如何随机排列数组问题
- 这是在 C 或 C++ 中生成随机字节数组的好方法吗?
- 计算变化数组中预期的反演次数
- 数组的值是随机变化的
- C++ 随机与数组