绕过改变C中的常量值

时间:2013-10-17 12:34:20

标签: c

我在这里遇到一个问题,我在写一个常量对象时遇到错误。 是的,我知道我是,但是对于这个功能,它要求用户输入骰子1-5的值,输入(i)将被分配给骰子[i],这不起作用,因为它是不变的,我该如何解决这个问题?

由于

void readDieValues(const int dice[], int nrOfDice)
{
//Reads user inut
     int i = 0;

//When i > 0 and < 5 the user is asked to entar a value for dice i+1
//Dice i+1 because i starts at 0 and dies are numbered from 1-5

    for ( ; i < 5 ; i++){
        printf("Die %d: ", i+1);
        scanf("%d", &dice[i]);
    }
}

2 个答案:

答案 0 :(得分:4)

咦?

你知道你会写入论点,但你仍然将其声明为const?为什么?这没有意义。

你总是可以试图抛弃const,但这非常难看,几乎不可能完成,当然不会出现在像你这样的情况下:

scanf("%d", (int *) &dice[i]);

此外,您必须检查scanf()的返回值,它是脆弱的I / O并且可能会失败。

答案 1 :(得分:3)

如果你知道你不会将它们视为常数,那么不要将事物声明为const

你写了一行

void readDieValues(const int dice[], int nrOfDice)

这是你与世界的合约,告诉你你保证不会改变价值观。既然您已经签订了该合同,那么您希望更改dice的值。而是写

void readDieValues(int dice[], int nrOfDice)

并且没有做出这样的承诺