【发布时间】:2012-03-02 00:03:11
【问题描述】:
嘿,伙计们,我正在尝试洗牌我的动态数组的内容,但它不起作用。我想知道你们是否有任何可以帮助我的建议或链接/资源。我正在尝试使用 std::randomshuffle 但我的测试吐出 0 而不是正确的数据。
Songs *ptr;
ptr = new Songs[25];
ifstream fin;
fin.open("input.txt");
while (fin.good()) //my input
{
getline(fin, song[num].title);
getline(fin, song[num].artist);
fin >> song[num].mem;
num++;
fin>>ws;
}
fin.close();
这是我尝试使用随机播放的函数
void shuffle (char choice, Songs song[], Songs *ptr, string title, string artist, int mem, int num)
{
if (choice == '4')
{
std::random_shuffle(ptr, ptr + num); //shuffle
}
for (int i = 0; i<num; i++) //test
{
cout << ptr[i].title << ptr[i].artist << ptr[i].mem << endl;
}
}
【问题讨论】:
-
为什么
shuffle()函数的所有参数?您只使用ptr和num。是否进行洗牌的逻辑实际上不应该在洗牌函数中完成。 -
这些是我的 ptr 数组的内容,所以我想我也必须包含这些内容
-
@gamergirl22 绝对不需要也不应该这样做。稍后你必须考虑如何有效地设计代码:这个 shuffle 函数的重点是 shuffle 歌曲并打印出来。所以我们只需要歌曲和 num(不是“song”和“ptr”)也是多余的。
-
@gamergirl22 至于洗牌,假设你为“ptr”和“num”传递了正确的参数,你如何洗牌这些歌曲并没有错。我怀疑您的程序失败的地方在于阅读歌曲。您可能希望在从文件中读取歌曲后立即输出歌曲,或者更好的是,学习如何使用调试器,您可以在跟踪代码时查看所有变量的值。
-
并且不要在没有理由的情况下使用
new。请改用std::vector,它会自行调整大小并适应文件中的歌曲数量。
标签: c++ arrays pointers shuffle