生成一个没有随机函数的随机数

时间:2017-04-09 17:30:42

标签: c random

我需要生成一个随机数而不使用" random"函数,所以我发现这个代码在系统中给我mlliseconds:

#include <stdio.h>
#include <sys/timeb.h>

int main()
{
struct timeb tmb;

ftime(&tmb);
printf("tmb.time     = %ld (seconds)\n", tmb.time);
printf("tmb.millitm  = %d (mlliseconds)\n", tmb.millitm);

return 0;
}

直到我尝试以这种方式在struct中使用它才能正常工作:

#include <sys/timeb.h>
#include "stdlib.h"
struct Num{
struct timeb tmb;
ftime(&tmp);    
};
int main()
{

return 0;
}

它在{ftime}给出错误。 任何帮助?

1 个答案:

答案 0 :(得分:0)

ftime(&tmp);是由C11/6.5.2指定的后缀表达式的示例(第四行向下):

        postfix-expression:
                 primary-expression
                 postfix-expression [ expression ]
                 postfix-expression ( argument-expression-listopt )
                 postfix-expression . identifier
                 postfix-expression -> identifier
                 postfix-expression ++
                 postfix-expression --
                 ( type-name ) { initializer-list }
                 ( type-name ) { initializer-list , }
         argument-expression-list:
               assignment-expression
               argument-expression-list , assignment-expression

C标准参考指定了您在C11/6.7.2.1中使用的结构说明符的语法,显然您的示例违反了该语法,因为没有可能后缀表达式这里:

        struct-or-union-specifier:
                 struct-or-union identifieropt { struct-declaration-list }
                 struct-or-union identifier
        struct-or-union:
                struct
                union
        struct-declaration-list:
                struct-declaration
                struct-declaration-list struct-declaration
        struct-declaration:
                specifier-qualifier-list struct-declarator-listopt ;
                static_assert-declaration
        specifier-qualifier-list:
                type-specifier specifier-qualifier-listopt
                type-qualifier specifier-qualifier-listopt
        struct-declarator-list:
                struct-declarator
                struct-declarator-list , struct-declarator
        struct-declarator:
                declarator
                declaratoropt : constant-expression

C的句法结构难以学习;它在大多数书籍中教得相当好。我的建议是你找到一个新的指南,因为如果你在语法上挣扎,C的语义将证明极具挑战性。正如我在你的问题的评论中写道:

  

我建议K&amp; R2E;当你遇到它们时进行练习(并且不要继续前进直到它们完成)。

如果您对教科书或练习中的某些词语感到困惑,请发布一个令您困惑的问题。