gpt4 book ai didi

c++ - 为什么我在从 time(NULL) 播种随机数生成器时收到可能丢失数据的警告?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:16:56 26 4
gpt4 key购买 nike

我正在学习 vector 并编写了一些代码来选择随机数,我可以用它来在荷兰购买彩票。但是尽管它运行了,编译器警告我“从‘time_t’转换为‘unsigned int,可能丢失数据’”。

谁能找出造成这种情况的原因?我什至没有在这段代码中定义任何 unsigned int;据我所知,默认情况下 int i 是一个带符号的 int。感谢您的洞察力。

#include <iostream>
#include <vector>
#include <string>
#include <ctime>
using namespace std;

void print_numbers();
string print_color();

int main() {
srand(time(NULL));
print_numbers();
string color = print_color();
cout << color << endl;

system("PAUSE");
return 0;
}

//Fill vector with 6 random integers.
//
void print_numbers() {
vector<int> lucky_num;

for (int i = 0; i < 6; i++) {
lucky_num.push_back(1 + rand() % 45);
cout << lucky_num.at(i) << endl;
}
}

//Select random color from array.
//
string print_color() {
string colors[6] = {"red", "orange", "yellow", "blue", "green", "purple"};
int i = rand()%6;
return colors[i];
}

确切的编译器消息:警告 C4244:“argument”:从“time_t”到“unsigned int”的转换,可能会丢失数据。第 11 行。

最佳答案

因为 time_t 在您的特定平台上恰好比 unsigned int 大,所以您会收到这样的警告。从“较大”类型转换为“较小”类型涉及数据的截断和丢失,但在您的特定情况下,这并不重要,因为您只是为随机数生成器播种并溢出 unsigned int 应该出现在非常遥远的 future 的某个日期。

明确地将其转换为 unsigned int 应该会抑制警告:

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

关于c++ - 为什么我在从 time(NULL) 播种随机数生成器时收到可能丢失数据的警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com