1

さて、私は数学クイズを作成しています。今のところ基本的なことですが、whileループの最後に出力を累積したいと思います。つまり、5つの質問を加算すると、出力には5つの質問すべての式が格納され、条件演算子を使用して答えかどうかを判断します。は正解または不正解であり、最後に表示されます。

私はJavaで同じプログラムを使用していますが、C ++が本当に好きで、もっと欲しいのでC ++に切り替えたいので、これを理解したいと思います。

Java:

output += "\n" + number1 + " - " + number2 + " = " + answer + ((number1 - number2 == answer) ? " CORRECT" : " WRONG");

C++の出力アキュムレータを使用したwhileループ:

while (count <= NUMBER_OF_QUESTIONS) {

    num1 = 1 + rand() % 50;
    num2 = 1 + rand() % 50;

    if (num1 < num2) {
        temp = num2;
        num2 = num1;
        num1 = temp;
    }

    cout << "\n"<< num1 << " + " << num2 << " = " << endl;
    cin >> answer;

    if (num1 + num2 == answer) {
        cout << "Right!" << endl;
        correctCount++;
    }
    else
        cout << "Wrong! Should be " << (num1 + num2) << endl;

// Increase count
count++;

    // Prepare all questions if correct or wrong, for output
    output += // The rest...
} 

//and for final output

cout << output;
4

2 に答える 2

0

STL ライブラリを使用せずに: 変数を配列に格納するだけです。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>


#define NUMBER_OF_QUESTIONS 5

int main()
{
    srand ( time(NULL) );
    int count = 0;
    //Init a
    int output[NUMBER_OF_QUESTIONS][4];

    while (count <= NUMBER_OF_QUESTIONS) {

        int num1 = 1 + rand() % 50;
        int num2 = 1 + rand() % 50;
        int answer = 0;

        if (num1 < num2) {
            int temp = num2;
            num2 = num1;
            num1 = temp;
        }

        std::cout << "\n"<< num1 << " + " << num2 << " = " << std::endl;
        std::cin >> answer;

        if (num1 + num2 == answer) {
            std::cout << "Right!" << std::endl;
            //correctCount++;
        }
        else
        {
            std::cout << "Wrong! Should be " << (num1 + num2) << std::endl;
        }

        // Prepare all questions if correct or wrong, for output
        output[count][0] = num1;
        output[count][1] = num2;
        output[count][2] = answer;
        output[count][3] = (num1 + num2 == answer);

        // Increase count
        count++;
    } 
    for (int i =0; i < NUMBER_OF_QUESTIONS; i++)
    {
        std::cout << "Q" << i << " : " ;
        std::cout << output[i][0] << " + " << output[i][1];
        std::cout << " = " << output[i][2] << " . ";
        if (output[i][3])
            std::cout << "Right Answer ! " << std::endl;
        else
            std::cout << "Wrong! Should be " << (output[i][0] +  output[i][1]) << std::endl;

    }
}
于 2012-11-27T12:07:18.180 に答える
0

したがって、私がこれを正しく読んでいる場合、5 つの質問をループスルーする必要があります。 5+12 = ユーザー入力 13+32 = ユーザー入力 31 + 1 = ユーザー入力
27+ 15 = ユーザー入力 11+11 = ユーザー入力









次に、プログラムは次のように出力します。

5+12 = 17
正しい
13+32 = 45正しい 31 + 1 = 33 間違っている
27+ 15 = 42 正しい 11+11 = 11 間違っ ている





それがあなたが望むものなら、次のようなことを試すことができます:

#define MAX_QUESTIONS 5
#define OPERANDS 2
#define LEFT 0
#define RIGHT 1 
int main()
{
   int ques[MAX_QUESTIONS][OPERANDS];
   int ans[MAX_QUESTIONS];
   for(int i=0; i < MAX_QUESTIONS; i++)
   {
      ques[i][LEFT] = 1 + rand() % 50;
      ques[i][RIGHT] = 1 + rand() % 50;
      if (ques[i][LEFT] < ques[i][RIGHT]) 
      {
         int temp = ques[i][RIGHT];
         ques[i][RIGHT] = ques[i][LEFT];
         ques[i][LEFT] = temp;
      }
      cout << "\n" << ques[i][LEFT] << " + " << ques[i][RIGHT] << " = " << endl;
      cin >> answer[i];
   }

   for(int i = 0; i < MAX_QUESTIONS; i++)
   {
      cout << "\n" << ques[i][LEFT] << " + " << ques[i][RIGHT] << " = " << answer[i] << "\n" << (((ques[i][LEFT] + ques[i][RIGHT]) == answer[i])?"CORRECT":"WRONG") << endl;
   }
}
于 2012-11-27T12:07:53.273 に答える