【问题标题】:c4014 when using rand() in C在 C 中使用 rand() 时出现 c4014
【发布时间】:2015-10-13 18:37:29
【问题描述】:

我正在尝试使用 C 中的 rand() 函数让我的程序返回一个随机数 [-5,5]。该程序正在运行,但我不喜欢它每次编译代码时都会发出 2 个警告的事实。 代码如下:

#include <time.h>
#include<stdio.h>
int main(int argc, char *argv[]){

    int randomNumber = 0;
    for (int index = 1; index < argc; index++) {
        printf("The %d is %s\n", index, argv[index]);
    }
    getchar();

    srand(time(NULL));
    randomNumber = (rand()%11)-5;
    return randomNumber;

}

这些是警告:

warning C4013: 'srand' undefined; assuming extern returning int
warning C4013: 'rand' undefined; assuming extern returning int

为什么会出现这些警告?我担心它们以后会引起一些问题,所以我想消除这些警告。

编辑:

添加了另一个库:

#include <stdlib.h>

2 个警告消失,1 个新警告:

warning C4244: 'function' : conversion from 'time_t' to 'unsigned int', possible loss of data

通过更改 srand 调用解决了新警告:

srand((unsigned int)time(NULL));

这是最终解决的程序:

#include <time.h>
#include<stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){

    int randomNumber = 0;
    for (int index = 1; index < argc; index++) {
        printf("The %d is %s\n", index, argv[index]);
    }
    getchar();


    srand((unsigned int)time(NULL));
    randomNumber = (rand()%11)-5;
    return randomNumber;
}

已解决,逐步显示编辑内容以供其他用户参考。 谢谢

【问题讨论】:

  • 你忘了#include &lt;stdlib.h&gt;
  • #include &lt;stdlib.h&gt; 或 ``#include ` 怎么样?
  • 包括在内,之前的2个不见了,现在又多了一个:warning C4244: 'function' : conversion from 'time_t' to 'unsigned int', possible loss of data
  • return randomNumber; from main 好像不是个好主意,看看What should main() return in C and C++?
  • @AlterMann 我的程序应该运行另一个程序,该程序将根据错误类型返回不同的数字。这段代码只是为了模拟我应该在未来运行的程序的错误发生(没有完成),这就是为什么一个随机数。

标签: c random warnings srand


【解决方案1】:

您需要包含stdlib.h。那就是定义这些函数的地方。

【讨论】:

  • 在包含 stdlib.h warning C4244: 'function' : conversion from 'time_t' to 'unsigned int', possible loss of data 后我收到此警告
  • @kadzu,您可以使用演员表删除此警告:srand((unsigned int)time(NULL));
【解决方案2】:

您收到此警告是因为尚未定义函数 randsrand

来自手册页:

名称 rand, rand_r, srand - 伪随机数生成器

概要

   #include <stdlib.h>

   int rand(void);

   int rand_r(unsigned int *seedp);

   void srand(unsigned int seed);

通过包含 stdlib.h,您可以获得这些函数的原型,编译器可以确保您正确调用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2018-04-30
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    相关资源
    最近更新 更多