1. ホーム
  2. c++

[解決済み] 警告 C4244: 'argument' : 'time_t' から 'unsigned int' への変換、データ消失の可能性 -- C++

2022-02-11 06:18:10

質問

サイコロを振って出た目を当てる簡単なプログラムを作りました。以前このコードを投稿しましたが、間違った質問で削除されました...今私はこのコードにエラーや警告を持つことはできませんが、なぜかこの警告はポップし続け、私はそれを修正する方法をまったく知りません...。 警告 C4244: '引数' : 'time_t' から 'unsigned int' への変換、データ損失の可能性"

#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>

using namespace std;

int  choice, dice, random;

int main(){
    string decision;
    srand ( time(NULL) );
    while(decision != "no" || decision != "No")
    {
        std::cout << "how many dice would you like to use? ";
        std::cin >> dice;
        std::cout << "guess what number was thrown: ";
        std::cin >> choice;
         for(int i=0; i<dice;i++){
            random = rand() % 6 + 1;
         }
        if( choice == random){
            std::cout << "Congratulations, you got it right! \n";
            std::cout << "Want to try again?(Yes/No) ";
            std::cin >> decision;
        } else{
            std::cout << "Sorry, the number was " << random << "... better luck next  time \n" ;
            std::cout << "Want to try again?(Yes/No) ";
            std::cin >> decision;
        }

    }
    std::cout << "Press ENTER to continue...";
    std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    return 0;
}

なぜこのような警告が出るのか、これを解明したいのです。 警告 C4244: 'argument' : 'time_t' から 'unsigned int' への変換、データ損失の可能性があります。

どうすればいいですか?

それは、あなたのシステムに原因があるのです。 time_t はより大きな整数型であり unsigned int .

  • time() を返します。 time_t というのは、おそらく64ビット整数です。
  • srand() が欲しい unsigned int であり、おそらく32ビット整数である。

だから警告が出るのであって、キャストで黙らせることができる。

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

この場合、RNGのシードに使うだけなので、ダウンキャスト(と潜在的なデータ損失)は重要ではありません。