C++ 在方程式中使用变量;错误 : expression must have integral or unscoped enum type & others

标签 c++ enums modulus srand

srand( 0 );
int points; // number of points
float computerNumber; // number generated by the computer
float guess; // user's guess
char quit; // What the user enters when they want to quit
int totalPoints; //the total score of all of the games played
int avgPoints; // the average score of all games played
int gamesPlayed; // how many games have been played
float rangeLow; // the lower end of the range
float rangeHigh; // the higher end of the range
points = 5;
quit = 'n';
gamesPlayed = 0;
totalPoints = 0;
while ( quit != 'q' )
{

    gamesPlayed++;
    cout << "Welcome to Guessing Game! \n";
    points = 5;
    cout << "What would you like your range to be? \n";
    cout << "Low number: \n";
    cin >> rangeLow;
    cout << "High number: \n";
    cin >> rangeHigh;
    if ( rangeLow > rangeHigh )
    {
        cout << "Please use a high number that is greater than the low number. \n";
        cout << "Low number: \n";
        cin >> rangeLow;
        cout << "High number: \n";
        cin >> rangeHigh;
    }
    else
    {
        ;
    }
    computerNumber = rand( ) % (rangeLow - rangeHigh + 1) + 10;
    cout << "Computer Number: " << computerNumber << endl;
    cout << "Points:" << points << endl;
    cout << "what is your guess? \n" << endl;
    cin >> guess;
    cout << "Your guess is: " << guess << endl;

当我输入此代码(以及不影响这些行的其他无错误代码行)时,它不会编译并输出两条错误消息-“表达式必须具有整数或无作用域的枚举类型”和“' %' 是非法的,右操作数的类型为 'float'"

我感觉这与在我的方程式中使用变量有关,但这应该不是问题吧?所有的变量类型都是与这个方程有关的 float ,我很困惑。

最佳答案

% 是整数值的模运算符。您的范围端点是浮点变量。在您的练习中,您应该将端点、computerNumberguess 设为int 变量。

int rangeLow, rangeHigh, computerNumber, guess;

然后看看计算机的数字生成器并插入一些值来尝试一下:

computerNumber = rand() % (rangeLow - rangeHigh + 1) + 10;
                 rand() % (   5     -    20     + 1) + 10;
                 rand() %          -14               + 10;

因此,您将得到 rand() % -14 + 10。这看起来不正确。反转范围端点:

computerNumber = rand() % (rangeHigh - rangeLow + 1) + 10;
                 rand() % (   20     -    5     + 1) + 10;
                 rand() %            16              + 10;

rand() % 16 + 10 更好,但显然会创建一个 [10, 10+16) 范围内的数字,或者将它不同(作为闭区间),[10, 25]。如果将 +10 替换为 +rangeLow,如下所示:

computerNumber = rand() % (rangeHigh - rangeLow + 1) + rangeLow;

你现在得到这样的范围:

[rangeLow, rangeLow + rangeHigh - rangeLow + 1)                             =>
[rangeLow, rangeHigh + 1)                          (left-closed interval)   =>
[rangeLow, rangeHigh]                              (closed interval)

这意味着 [5, 20] 具有我使用的示例值。

现在,看看 < random >。 标准库的那部分包含类和函数,使这一切变得更加简单:

关于C++ 在方程式中使用变量;错误 : expression must have integral or unscoped enum type & others,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58528782/

相关文章:

java - 如何将不同的枚举类型传递给方法?

enums - 如何在 Rust 中的通用类型枚举上实现 fmt::Display?

java - `java (0 % 2 != 0) == false`

c - 如何处理不能通过 int 在 c 中存储的大数

java - 扫描数组中可被 3 整除的最长子数组的长度

c# - 从 C++ 非托管应用程序检索 C# .NET 镜像

c++ - sqlbindparameter 未用于所有参数 - mysql 和 C++

c++ - 有没有办法让 operator= 用于枚举?

c++ - 创建 shared_ptr 时类析构函数调用两次

c++ - 不理解++ 和 -- 的指针算术