【问题标题】:warning C4244: 'function': conversion from 'time_t' to 'unsigned int', possible loss of data'警告 C4244:'function':从 'time_t' 转换为 'unsigned int',可能丢失数据'
【发布时间】:2018-12-03 12:53:23
【问题描述】:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>

// Program to generate random numbers, using an array

int main() {
int arr[50];
int i;

srand((unsigned int)time(NULL));
for (i = 0; i < 50; i++)
{
    arr[i] = rand() % 50;
    printf("arr[%d] = %d\t", i, arr[i]);
}
_getch();
return 0;

}

我收到此警告:

(12):警告 C4244:'function':从 'time_t' 转换为 'unsigned int',可能会丢失数据。

【问题讨论】:

  • 您需要包含声明the time function的正确头文件。
  • 您还有其他问题,因为您似乎忘记了数组索引是从零开始的。 IE。包含 50 个元素的数组的有效索引为 049(含)。并不是说您在显示的代码中需要一个数组,真的。
  • 嗨,我想让数组在 1 到 50 的范围内,而不是 0-49。
  • 您编辑后的问题非常不同。你忘了改变你的头衔。请阅读how to ask good questions,以及this question checklist
  • 关于数组,为什么?特别是因为这意味着您(目前)超出它的范围?

标签: c


【解决方案1】:

srand 想要一个unsigned int 作为参数,但time 在您的平台上返回一个比unsigned int 更大的类型的time_t,因此警告可能丢失数据。

在这种情况下,可以忽略警告,因为您实际上只是想给srand 一个看似随机的值。

要消除警告,您可以将time 返回的值转换为unsigned int

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多