C ++我的程序让我很困惑

时间:2016-09-21 17:58:34

标签: c++

这是:

pattern = @"\*$"

好的我原来的问题是它总是崩溃,现在打印" @" ???

4 个答案:

答案 0 :(得分:3)

C ++数组基于0。

players[1]正在访问数组范围之外的位置。

您需要:players[0]

答案 1 :(得分:0)

肯定会崩溃以下一行:

players[1]=players[1]+x+y;

由于players数组的大小为1,因此它只有索引 0 。在上面一行中,它尝试访问索引 1 。看一下Buffer Overflow和数组索引越界。

  • 尝试定义一个大小恒定的数组。
  • 如果您需要动态数组,请使用链接列表或向量。

答案 2 :(得分:0)

cout << ("Your score is" + players[1]) << endl;

在这里,您尝试使用直接字符串连接,但是您无法将字符串文字与这样的整数连接起来。你最终做了指针运算,这绝对不是你想要的。

您应该使用cout的内置格式:

cout << "Your score is" << players[1] << endl;

您的下一个问题是players未正确声明;一个数组不能有运行时边界,numplayers(尽管只有一个初始值)最终是一个&#34;运行时&#34;变量。如果数组的大小稍后会改变,那么使用std::vector会更好;否则numplayers成为constexpr

你的最后一个问题是,如果数组声明 有效,你就试图访问单元素数组的第二个元素!第一个元素是players[0],而不是players[1]

答案 3 :(得分:0)

有很多事情你做得不好。

  • 我相信你正在使用C ++,我不知道如何创建动态大小的数组,即int players[numplayers]。在C ++中,我们可以创建固定大小的数组,即int players[10]或使用指针到数组,以便动态分配内存,例如: int* players = new int[numplayers]。这将分配一个大小为numplayers的数组,一个名为player的 int指针指向它。我们可以将此指针用作普通数组,例如打印第一个数组索引写为player[0]或其他语法为*(player + 0)。请记住在程序结束时删除此动态分配的内存,即delete[] player
  • 第二件事是当你分配一个数组并使用它的值进行计算时,总是将它初始化为0,因为新分配的数组包含垃圾值,它会影响你的计算。将其初始化为零的代码可能是这样的:

这是循环:

for(int i = 0 ; i < numplayers ; i++){
    player[i]=0;
    //another syntax is : *(player + i) = 0;
}
  • C ++ 不会像您在std::cout语句中那样进行连接。像这样: cout << "Your score is" << players[0] << endl;
  • 在C ++中,数组始终以索引0开头,因此在这种情况下第一个索引将为0。所以如果你的程序是这样的话你的程序会很好用:

    int numplayers = 1;
    int* players = new int[numplayers];
    int x = 0, y = 0;
    srand(time(0));
    x = (rand() % 6 + 1);
    y = (rand() % 6 + 1);
    players[0] = 0;
    players[0] = players[0] + x + y;
    cout << "Your score is" << players[0] << endl;
    delete[] players;
    
    return 0;