2016-02-07 48 views
-2
// 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; 

} 

的「無符號整型」,可能的損失現在的問題/錯誤是警告警告C4244:「參數」:轉換從「time_t的」數據加上其他錯誤

警告1個警告C4244: 'argument':從'time_t'轉換爲'unsigned int',可能丟失數據

警告2警告C4552:' - ':操作符無效;預期操作者的副作用

錯誤3錯誤C2660:「rand_float」:函數不採取0參數

+2

這個聲明是否指定零參數:'int rand_float(int n);'? –

+0

我不這麼認爲? – zezhawk22

+0

那麼爲什麼你提供了一個不同的定義,並且在你調用它時不傳遞任何參數? –

回答

1

警告1個警告C4244:「參數」:從「的time_t」轉換爲「無符號整型」 ,數據

這是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調用的函數,則應該更改代碼頂部的聲明以匹配。

+0

是的,我看到我的錯誤非常感謝你,先生。 – zezhawk22