簡體   English   中英

C ++控制台模式程序在Mac和Windows上產生不同的結果

[英]C++ console-mode program produces different result on Mac to Windows

我的任務是實現一種簡單的替代加密方案,並為其提供編碼器。

即使已指示我編譯該程序並在Windows的Visual Studio中運行,以下程序仍適用於Mac。

我的理由是我擁有一台Mac,並認為在我喜歡的任何計算機上編寫程序,然后在必要時進行調整也是一樣的。 畢竟,這只是一個控制台模式的應用程序。

我沒想到該程序在Mac上的表現如何:

在Mac上,種子似乎根本不起作用。 即使我只使用了兩個不同的種子,它仍在繼續產生新的排列。

Windows上的Visual Studio生成了產生每個種子值唯一的排列的預期結果。 對於Mac上的random_shuffle函數而言,與PC上的組件不同,srand只是沒有任何意義嗎?

下面的代碼,然后輸出剪切和粘貼。 兩者均來自Mac X-Code 7.2編譯。

因此,基本上,為什么不對種子做出預期的結果?

/code

#include <string>
#include <cstdlib>
#include "algorithm"
#include <iostream>

using namespace std;

const string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ.,í ";

string cp(unsigned seed) {
    srand(seed);
    string permutation = ALPHABET;
    // using built-in random generator:
    random_shuffle(permutation.begin(), permutation.end());
    return permutation;
}

int main(int argc, char** argv) {

    unsigned seedy = 100;
    string what = cp(seedy);
    cout << what << endl;

    seedy = 200;
    what = cp(seedy);
    cout << what << endl;

    seedy = 100;
    what = cp(seedy);
    cout << what << endl;

    seedy = 100;
    what = cp(seedy);
    cout << what << endl;

    getchar();

    return 0;
}

/code

控制台輸出:

'XQACKHSLOJ,TRBZNGV.W FIUEYDMP

OILQPNSWBAHYGTD'EFKV,XMR。 蘇州

J,DKXTHP'RQOEZCYG。 SMFIULABVNW

WNJTCYA EHSDPQLKO.ZURGF,'VMIBX

srand(seed)可能會或不會影響random_shuffle的結果; 它取決於實現,因此您不應該依賴它。

random_shuffle函數使用未指定的隨機性源 這可能是rand()或可能完全不同; 可能是Visual Studio使用的C ++標准庫實現使用rand() ,而您在OS X上使用的實現使用的是不同的隨機性。

如果確實需要它在內部使用rand() ,則可以傳遞一元函數作為第三個參數,以告訴它如何為隨機播放生成隨機數:

random_shuffle(permutation.begin(), permutation.end(), [](int x) { return rand() % x; });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM