【问题标题】:Strange Errors. Using rand() and arrays within a loop奇怪的错误。在循环中使用 rand() 和数组
【发布时间】:2016-03-01 22:48:15
【问题描述】:

我真的无法解释我的程序发生了什么。我真的无法发现可能导致问题的原因。它发生在这个函数中

void test()
{
    srand(time(NULL));

    questionNo = 1;

    for (testLoop = 0; testLoop < 10; ++testLoop)
    {
        const char opArray[3] = { 'x', '+', '-' };
        int pickValue = rand() % 3;
        char Operator = opArray[pickValue];

        int n1 = rand() % 20 + 1;
        int n2 = rand() % 20 + 1;

        if (Operator = '+')
            answer = n1 + n2;
        else if (Operator = '-')
            answer = n1 - n2;
        else
            answer = n1 * n2;

        cout << "Question " << questionNo << "\n";
        ++questionNo;
        cout << n1 + " " << Operator + " " << n2 << "?";
        userAnswer = cin.get();

        if (userAnswer = answer)
        {
            cout << "\n\n Correct!\n";
            system("cls");
            ++score;
        }
        else
        {
        cout << "\n\n Incorrect!\n";
        system("cls");
        }
        Sleep(500);
    }
    cout << "You scored " << score << " out of 10!";
    fileWrite(score);
}

下面是一个例子。 这输出到控制台

问题 1
@Øÿ×╝׳×0ƒ11?

那是什么???
它每次也会跳过两个问题。例如它去

“问题 1”
“问题 3”
“问题5”

【问题讨论】:

  • 向 c 字符串添加字符(在大多数情况下)是错误的:Operator + " "
  • 你有:cout &lt;&lt; n1 + " " &lt;&lt; Operator + " " &lt;&lt; n2 &lt;&lt; "?";——但你可能应该两次都用&lt;&lt;代替+cout &lt;&lt; n1 &lt;&lt; " " &lt;&lt; Operator &lt;&lt; " " &lt;&lt; n2 &lt;&lt; "?";至少看起来更正统。
  • if (Operator = '+') 应该是 if (Operator == '+')(注意双精度 =

标签: c++ arrays for-loop random error-handling


【解决方案1】:

您在此代码 sn-p 中使用的是赋值运算符 = 而不是比较运算符 ==

    if (Operator = '+')
        answer = n1 + n2;
    else if (Operator = '-')
        answer = n1 - n2;
    else
        answer = n1 * n2;

按以下方式修改

    if (Operator == '+')
        answer = n1 + n2;
    else if (Operator == '-')
        answer = n1 - n2;
    else
        answer = n1 * n2;

这个语句也有同样的错误

   if (userAnswer = answer)

也代替

   userAnswer = cin.get();

使用operator &gt;&gt;

sin >> userAnswer;

这句话也有错别字

    cout << n1 + " " << Operator + " " << n2 << "?";

应该有

    cout << n1 << " " << Operator << " " << n2 << "?";

【讨论】:

  • 他还有if (userAnswer = answer),需要更改为if (userAnswer == answer)
  • 我在我的程序中改变了这个,我没有任何那些奇怪的字符。但是,它知道在没有操作员的情况下只脱口而出一个数字。每次它仍然会跳过一个问题。例如从第 3 题到第 5 题
  • @Reece 查看我的 uodated 帖子。
【解决方案2】:

你有:

cout << n1 + " " << Operator + " " << n2 << "?";

您应该使用&lt;&lt; 代替+ 两次:

cout << n1 << " " << Operator << " " << n2 << "?";

n1 + " " 术语是将n1 的值添加到存储一个空白字符串的地址,生成一个char *,然后&lt;&lt; 正在打印它发现的超出末尾的任何垃圾该字符串(假设n1 是正数并且大于1,或者如果它是负数,它会在字符串之前找到它)。实际上,您已经为该术语写了&amp;" "[n1]。与其他加法表达式类似。

这解释了你得到的特殊输出。您在分配= 时也有多个问题,您打算比较==

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多