【问题标题】:Generating a random number without random function [closed]生成没有随机函数的随机数[关闭]
【发布时间】:2017-04-09 17:30:42
【问题描述】:

我需要在不使用“随机”函数的情况下生成一个随机数,所以我发现这段代码在系统中给了我毫秒:

#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} 给出错误。 有什么帮助吗?

【问题讨论】:

  • “一个错误”?而实际的错误是?
  • 啊,刚刚看到了:你为什么要从结构的声明中调用函数(即在函数之外)?因为……嗯……为什么会这样?
  • 它的作业,我们需要在结构中生成一个随机数,然后在 main 中使用它(我不能使用 get_time 或随机函数)
  • 嗯,这是 C,结构是数据类型,不包含代码。因此,如果提示是“在结构中执行此操作”,则答案是“语言无法执行此操作”。
  • 提示是“不要在主函数中使用这个”

标签: c random


【解决方案1】:

ftime(&amp;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 的语义将被证明极具挑战性。正如我在 cmets 中为您的问题所写:

我建议 K&R2E;当你遇到它们时做练习(不要继续,直到它们完成)。

如果您对教科书或练习中的某些单词感到困惑,请就让您感到困惑的问题发表一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    相关资源
    最近更新 更多