// Write a random number generator that returns a random folating point number between 0.0 and 1.0.
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int rand_float(int n);
int main()
{
int n, i;
double r;
srand(time(NULL));
cout << "Enter number of dice to roll: ";
cin >> n;
for (i - 1; i <= n; i++) {
r = rand_float();
cout << r << endl;
}
return 0;
}
// Random Float Function
//
double rand_float() {
return (double) rand () / RAND_MAX;
}
现在问题/错误是
警告1警告C4244:&#39;参数&#39; :来自&time;&lt; time_t&#39; to&#39; unsigned int&#39;,可能丢失数据
警告2警告C4552:&#39; - &#39; :运算符无效;具有副作用的预期算子
错误3错误C2660:&#39; rand_float&#39; :function不带0个参数
答案 0 :(得分:1)
警告1警告C4244:'参数':从'time_t'转换为'unsigned int',可能丢失数据
这适用于srand(time(NULL));
,其中time
返回的值大于srand
的参数值。
旧代码经常会发生这种情况,因为time_t
最近变得更大,因此我们不会耗尽时间值。它计算自1970年以来的秒数,现在是一个非常大的数字。
警告2警告C4552:' - ':操作员无效;具有副作用的预期算子
这适用于for (i - 1; i <= n; i++)
,其中第一部分i - 1
无效。你可能意味着i = 1
。
错误3错误C2660:'rand_float':函数不接受0参数
您已将该函数声明为int rand_float(int n);
,因此当您使用0参数调用它时,编译器正确地认为您应该传递n
的值。
当您稍后定义double rand_float()
时,编译器认为这是一个完全不同的函数。您可以重载具有相同名称但不同参数的函数,因此根据语言可以,但可能不是您想要的。
如果这是您要从main
调用的函数,则应更改代码顶部的声明以匹配。