2011-10-13 26 views
-2

这次是C++问题。C++存储两个随机数的乘积

我试图在两个随机数之间存储产品......它应该是问什么两个随机数之间产生的基于srand(time(0))生成的,并且输入-1后退出...

下面是我的代码:

#include <iostream> 
using std::cout; 
using std::cin; 
using std::endl; 

#include <iomanip> 
using std::setw; 

#include <cstdlib> 
using std::rand; 
using std::srand; 

#include <ctime> 
using std::time; 

int multiplication() 
{ 
    srand(time(0)); 
    int x = 0; 

    while (x != -1) 
    { 
     int random_int; 
     random_int = (rand()%10 * rand()%10); 
     cout << "(Enter -1 to quit) \n"; 
     cout << "" << rand() % 10 << " multiplied by " << rand() % 10 <<"? \n"; 
     cin >> x; 

     if(x == random_int) 
     { 
      cout << "you're right!" << endl; 
     } 
     else 
     { 
      cout << "you're wrong" << endl; 
     } 
    } 
    return 0; 
} 

int main() 
{ 
    multiplication(); 
} 
+0

问题在哪里? –

回答

3

您应该注意运算符的优先级。模运算符%与乘法*具有相同的优先级。因此,当你写

rand()%10 * rand()%10 

C++会解释,由于

换句话说
((rand()%10) * rand()) % 10 

最后一个模被应用到一切的结果。

如果你想在0和9之间乘两个随机数,你应该改用

(rand() % 10) * (rand() % 10) 

,其中额外的括号确保正确的计算顺序。

2

你产生随机数每一次,不仅每次进入循环,而且它们打印到屏幕时的时间。除了缺乏一个实际的问题,我想你要至少做这样的事情:

int random_digit_1 = rand()%10, random_digit_2 = rand()%10; 
    int random_int = random_digit_1 * random_digit_2; 

    cout << "(Enter -1 to quit) \n"; 
    cout << "" << random_digit_1 << " multiplied by " << random_digit_2 <<"? \n"; 
    cin >> x; 

如果你想随机值是在每次循环一样,只需移动的定义和初始化循环外的随机变量。

3

您正在生成两个随机数来计算答案,另外两个不同的随机数提出问题。有可能他们会有所不同!

所以:

int a = rand()%10, b = rand()%10; 
int random_int = a*b; 
//... 
cout << a << " multiplied by " << b <<"? \n"; 

顺便说一句,你的代码中有相当多的风格缺陷...

  • 不要叫srand()从功能。通常应该从main调用。
  • 如果一个函数返回int,那么返回一个int这意味着任何东西。如果不是,则返回void
  • 检查用户输入是否有效:if (!(cin >> x))或类似。
  • 始终如一地使用endl
  • 为什么cout << ""?它看起来像一个Java成语,但在C++中什么也不做。