-4

このコードを書くとき:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;


int random = std::rand() % 9 + 1;



int main()
{
    std::srand(std::time(0));
   if(random==1 || random ==2 || random == 3){
        cout << "Wolf" << endl;
   }  else if(random==4 || random ==5 || random == 6){
        cout << "Bear" << endl;
   }  else if(random==7 || random ==8 || random == 9){
        cout << "Pig" << endl;
   }
}

私がそれを実行するたびに、私が望んでいたように、何か他のもの (オオカミ、ブタ、またはクマ) が印刷されます。しかし、この関数を次のようにコードに追加すると:

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using namespace std;


int random = std::rand() % 9 + 1;

void func(){
   if(random==1 || random ==2 || random == 3){
        cout << "Wolff" << endl;

   }  else if(random==4 || random ==5 || random == 6){
        cout << "Bearr" << endl;

   }  else if(random==7 || random ==8 || random == 9){
        cout << "Pigg" << endl;

   }
}

int main()
{
    std::srand(std::time(0));


   if(random==1 || random ==2 || random == 3){
        cout << "Wolf" << endl;
        func();
   }  else if(random==4 || random ==5 || random == 6){
        cout << "Bear" << endl;
        func();
   }  else if(random==7 || random ==8 || random == 9){
        cout << "Pig" << endl;
        func();
   }
}

実行するたびに、Bear Bearr、Wolf Wolff、Pig Pigg などの他の何かを印刷したいのですが、この関数を使用すると、実行するたびに同じ結果が得られます。問題は何ですか?
私を助けてください、私はC ++が初めてです。

4

2 に答える 2

0

編集:「bear」、「bearr」、「pig」、「pig」の目標に合わせて変更します。

int random = std::rand() % 9 + 1;

main() の前に、起動時に値が割り当てられる「random」と呼ばれるグローバル変数を宣言します。値は (9 でモジュロ化された rand() のデフォルトの戻り値) に 1 を加えたものになります。自動的には変更されません。

あなたが探しているように見えるのは

int random()
{
    return (std::rand() % 9) + 1;
}

これは、rand を呼び出し、値を 9 でモジュロしてから 1 を返す関数を定義します。編集:「func()」関数内で同じ値を表示するには、関数パラメーターとして値または参照で渡します。

#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>

using std::cout;
using std::endl;

int random() {
    return (std::rand() % 9) + 1;
}

void func(int randNo){
    switch (randNo) {
        case 1: case 2: case 3:
            cout << "Wolff" << endl;
        break;
        case 4: case 5: case 6:
            cout << "Bearr" << endl;
        break;
        case 7: case 8: case 9:
            cout << "Pigg" << endl;
        break;
    }
}

int main()
{
    std::srand(std::time(0));

    int randNo = random();
            switch (randNo) {
        case 1: case 2: case 3:
            cout << "Wolf" << endl;
            func(randNo);
        break;
        case 4: case 5: case 6:
            cout << "Bear" << endl;
            func(randNo);
        break;
        case 7: case 8: case 9:
            cout << "Pig" << endl;
            func(randNo);
        break;
    }

            cout << "And now for something completely different." << endl;
    for (size_t i = 0; i < 10; ++i) {
        cout << i << ": ";
        func(random());
    }
}
于 2013-06-30T21:43:36.290 に答える