为了账号安全,请及时绑定邮箱和手机立即绑定

如何将函数从 Java 转换为 C?

如何将函数从 Java 转换为 C?

侃侃尔雅 2022-10-07 16:26:11
我们被要求用 Java 构建一个随机字母库。我做了功课。我们现在被要求用 C 语言编写。我用 Java 中的 nanotime 做到了。我做了一些研究,但我在 C 中找不到纳米时间。已经在 C 中尝试过:(它没有用)Random SayiOlustur(){Random this;this = (Random) malloc(sizeof(struct RANDOM));char randomly;int i;struct timeval before , after;gettimeofday(&before , NULL);for (i=1 ; i <= 100 ; i++){   printf("%d %d %d ",i, i*i, i*i*i);}gettimeofday(&after , NULL);printf("%d",Nano(before,after)); int random;double test;while(true){    test = Nano(before,after);    random = (int)test % (int)123.0;    if((random >= 65 && random <= 90) || (random >= 97 && random <= 122)){    randomly = (char) random;    break;    }}}int Nano(struct timeval x,struct timeval y){    double x_ms , y_ms , diff;    x_ms = (double)x.tv_sec*1000000 + (double)x.tv_usec;    y_ms = (double)y.tv_sec*1000000 + (double)y.tv_usec;    diff = (double)y_ms - (double)x_ms;    return diff;}Java代码:(工作) private long Now(){        long now = System.nanoTime();        return now; }public char Random(){        char rastgele;        while(true){            random = (int)((Now())%123);            // ASCI            if((random >= 65 && random <= 90) || (random >= 97 && random <= 122))                break;        }        rastgele = (char) random;        return rastgele;    }public static void main(String[] args) {        RastgeleKarakter rastgele = new RastgeleKarakter();        System.out.println("Rastgele Karakter: " + rastgele.Random());}出去:run:Rastgele Karakter: m \\ Random出去:runRastgele Karakter: y \\ Random
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

您正在寻找的 Unix 系统调用是 clock_gettime() ,它将为您提供纳秒时间。

也就是说,即使您没有问,我也会对您的 C 代码提供一些评论:您最好尝试从头开始编写代码,而不是移植 Java 代码。你的系统可能会提供 random() 调用,它会给你一个比你的方法更干净的随机数。此外,您永远不应该从 malloc() 转换返回值:它返回 void *。如果可以避免的话,永远不要使用它——这是一个非常糟糕的习惯,最终只会对你隐藏错误。同样,不要将 y_ms 和 x_ms 转换为双精度——您将它们声明为双精度。当您更改 y_ms 和 x_ms 的声明并忘记更改演员表时,该演员表只会伤害您。

您在 Nano() 之前和之后传递,这很糟糕。这些是结构,因此您将结构中的所有数据复制到堆栈中。将指针传递给结构要好得多,因此您只需编写一个指针。


查看完整回答
反对 回复 2022-10-07
  • 1 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信