gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:42 26 4
gpt4 key购买 nike

好吧,我写了一个应该生成随机值的小程序,但是没有值应该在输出文件中出现两次。在 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 是我的测试值)

但在文本文档中输出的是 32767 个值,然后程序什么也没做。

解决方案:使用 rand() % 214748346; 而不是 rand() % (214748346 - 1 + 1) + 1;

最佳答案

看起来 rand() 在该库中只有 16 位。调用两次使其成为 32 位:

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

此外,考虑使用 Bob Floyd 的算法消除内部重复搜索循环:https://blog.acolyer.org/2018/01/30/a-sample-of-brilliance/

关于c - 为什么代码在 Linux 上运行而不在 Windows 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56960319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com