【问题标题】:How do rand/srand functions work in C [closed]rand/srand 函数如何在 C 中工作 [关闭]
【发布时间】:2017-07-06 03:29:48
【问题描述】:

我正在尝试了解 randsrand 函数的工作原理:

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
    unsigned int seed;
    printf("please type in new seed:\n");
    scanf("%i", &seed);
    void srand(unsigned int seed);
    int rand(void);
    printf("%i\n", rand);   
    return 0;
}

但是我的编译器说:

格式 %i 需要 int 类型的参数,但参数 2 的类型为 int (*)(void) [-Wformat=] printf("%i\n", rand);

错在哪里?

【问题讨论】:

  • 该错误与randsrand都无关...
  • 您将函数与变量混淆了。
  • 当你想调用函数时,你正在使用声明函数的语法。
  • 你令人困惑的语言。您的标题说 C 语言,但您的标签是 C++。哪种语言? C++ 具有提高随机性的功能,而 C 没有。
  • 版主注意:在 cmets 中请保持文明。 Be Nice.

标签: c function random types


【解决方案1】:

你传递函数而不是整数...试试:

printf("%i\n", rand()); 

【讨论】:

    【解决方案2】:

    你有一些基本的语法误解。当你写:

    void srand(unsigned int seed);
    int rand(void);
    

    那些是函数的声明,它不调用函数。要调用函数,您不需要包含参数和返回类型,只需将参数(如果需要)放入 ()

    srand(seed);
    

    然后你打印结果:

    printf("%d\n", rand());
    

    rand后面的()表示调用函数;它返回的值将传递给printf()。由于您忽略了这一点,您的代码试图将函数指针本身传递给printf(),而不是它返回的值。

    【讨论】:

    • 你的“参数”和“参数”弄错了 :-)
    • @KerrekSB 我不记得哪个是哪个。
    • 想想“默认参数”,这会给你一个可靠的线索。或“可变参数——可变参数”。如果您正在为获胜的球队效力,或者“依赖于参数的查找”。
    • 是的,但这并不能帮助您(或小众生)对编程有一个清晰的认识。最好认为“参数是函数的一部分”,“参数是调用的一部分”。
    • @Barmar:那不好。想想typedef void F(int);F * f(...);。将5 传递给f 还是传递给f() 有很大的不同!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 2019-02-25
    • 2016-07-13
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多