为什么代码在Linux上而不在Windows上运行?

时间:2019-07-09 20:49:25

标签: c linux windows debugging

好吧,我编写了一个小程序,该程序应该生成随机值,但是在输出文件中两次都不应该有任何值。 在Linux上,它运行良好,但是在Windows上,它只运行在第32768个值上的无限长。 这意味着该cmd处于打开状态,但从那时起实际上什么也没发生。

到现在我已经调试了30次,但是它从来没有任何问题(调试真的很麻烦) 我写了它,重新编译,甚至在调试器下运行时更改了值

以下是代码:

 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 #include <stdbool.h>

int intlen(int[]);

int main(int argc, char *argv[]) {
    FILE *fp;
    int percent = 0;
    int Ergebnis = 0, length = 0, lenNow = 0;
    bool proof = true;
    srand(time(NULL));
    fp = fopen("ranGen.txt", "w");
    length = atoi(argv[1]);
    int Lookup[length];
    for (int x = 0; x < length; x++){
        Lookup[x] = 0;
    }
    for (int i = 0; i < length; i++) {
        do {
            proof = true;
            Ergebnis = rand() % (2147483646 - 1 + 1) + 1;

            for (int j = 0; j < length && Lookup[j] != 0 && proof != false; j++) {
                if (Ergebnis == Lookup[j]) {
                    proof = false;
                }
            }
        }while(proof == false);
        Lookup[lenNow] = Ergebnis;
        lenNow++;
        fprintf(fp,"%i ",Ergebnis);
    }
    return 0;
}

发布了所有内容,但是发布了输出,因为我真的不知道问题出在哪里,我想您将需要最多的内容来重现我的问题。 如果您对其进行了编译,请使用诸如50000之类的命令通过cmd运行它,以使其高于32768。

(例如:example.exe 50000)

预期的是,它将创建一个名为RanGen.txt的文件,该文件具有200000个随机值(200000是我的测试值)

但是在文本Document中输出的是32767个值,然后程序仅执行了其他操作。

解决方案:使用rand() % 214748346;代替rand() % (214748346 - 1 + 1) + 1;

1 个答案:

答案 0 :(得分:0)

类似rand()的那个库中只有16位。通过两次调用使其变为32位:

int rand32() {
    return rand() ^ (rand() << 16);
}

另外,考虑使用Bob Floyd的算法https://blog.acolyer.org/2018/01/30/a-sample-of-brilliance/

消除内部重复搜索循环