Надеюсь, теперь, когда мой закрытый вопрос был автоматически удален, мне разрешено задать этот вопрос снова?
Итак, вот что я пытаюсь сделать:
Программа проверяет последовательности чисел, выдаваемые функцией rand() % 10, на наличие определенных строк чисел. В данном случае это строки 444 и 555. Таким образом, в Windows первая найденная программой последовательность, содержащая эти строки (только первые 10 чисел), — это последовательность, выводимая семенем 61163. Последовательность — 3355444555.
Теперь, просто чтобы убедиться, я проверяю, что rand() % 10 на самом деле выводит с этим начальным числом с помощью простой программы (обе программы показаны ниже), которая равна 3355444555. Очень ожидаемо.
Пока все имеет смысл.
Однако в Linux вывод программы не совпадает с тем, что фактически выводит rand(). Так, например, первая последовательность, которую программа находит, содержащая строки 444 и 555 в первых 10 числах, — это последовательность, выводимая начальным числом 154950. Последовательность — 4555232444.
Тем не менее, все имеет смысл (rand() имеет разные реализации в Windows/Linux, поэтому имеет смысл, что первая найденная последовательность полностью отличается от Windows).
Однако и в этом проблема: при проверке того, что rand() % 10 на самом деле выводит с этим начальным числом, в отличие от Windows, последовательности не совпадают. Последовательность, которая выводит 154950, на самом деле равна 1778785265 (проверено с помощью той же простой программы).
И это моя проблема. Как упоминалось ранее, действительно странная часть заключается в том, что код работает в Windows, и я не уверен, как что-то специфичное для Linux может испортить это.
Код для программы:
#include <iostream>
#include <sstream>
#include <cstdlib>
using namespace std;
int main()
{
int result;
string text;
int minSeed;
int maxSeed;
string temp;
cout << "Seed Seeker. Checks a range of random seeds for specific strings.\n";
cout << "Random Seed: lowest value: ";
getline(cin, temp);
minSeed = atoi(temp.c_str());
cout << "Random Seed: highest value: ";
getline(cin, temp);
maxSeed = atoi(temp.c_str());
cout << "Generate how many random numbers / seed? ";
getline(cin, temp);
int rndRange = atoi(temp.c_str());
string lookForThisA="444";
string lookForThisB="555";
for (int j = minSeed; j <= maxSeed; ++j)
{
text = "";
for (int i = 0; i < rndRange; ++i){
result = rand() % 10;
text += static_cast<ostringstream*>(&(ostringstream() << result))->str();
}
if (text.find(lookForThisA) != std::string::npos) {
if (text.find(lookForThisB) != std::string::npos) {
std::cout << "\n\n\nString found!!!!\n\n";
cout << text << "\n\nSeed: " << j << " ";
}
}
}
}
Программа, используемая для проверки вывода rand():
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
srand(154950);
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
cout << rand() % 10;
}
srand(int)
) случайного движка в вашем 1-м образце?!? Те программы, которые вы упомянули, не связаны? - person πάντα ῥεῖ   schedule 01.07.2014