Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从常量中删除大括号会中断我的程序吗?_C - Fatal编程技术网

C 从常量中删除大括号会中断我的程序吗?

C 从常量中删除大括号会中断我的程序吗?,c,C,我昨天接到一个作业,内容如下:生成并显示[100120]范围内的20个随机数。然后按升序写出此范围内所有未选择的数字。我的解决方案可行,但有个问题。当我从常量长度中删除大括号时,程序将中断。我说的是带箭头的线(我们通过将数字的值设置为正常情况下无法出现的值(MIN-1)来实现) 对于(i=0;i

我昨天接到一个作业,内容如下:生成并显示[100120]范围内的20个随机数。然后按升序写出此范围内所有未选择的数字。我的解决方案可行,但有个问题。当我从常量长度中删除大括号时,程序将中断。我说的是带箭头的线(我们通过将数字的值设置为正常情况下无法出现的值(MIN-1)来实现) 对于(i=0;iint delete=rand()%(LENGTH);//您应该将括号放在
#define
中,例如
#define LENGTH(MAX-MIN+1)
。它中断的原因是预处理器只进行文本替换,因此如果没有括号,您将得到
int delete=rand()%MAX-MIN+1
,其计算结果为
(rand()%MAX)-MIN+1
。这实际上解决了我的问题,谢谢。我们课程中的一张幻灯片使用了这样的语句:“#define A antal MAX-MIN”那么这是否也不正确?是的,幻灯片不正确,或者至少是错误的做法。加上括号,该语句变为
rand()%(MAX-MIN+1)
这将强制首先计算
最大-最小值+1
。谢谢,现在我明白了。如果您将此作为答案发布,我将接受它,这样您就可以获得声誉积分。您应该在
#define
中添加括号,例如
#define LENGTH(最大-最小值+1)
。它中断的原因是预处理器只进行文本替换,因此没有括号,您将得到
int delete=rand()%MAX-MIN+1
,其计算结果为
(rand()%MAX)-MIN+1
。这实际上解决了我的问题,谢谢。我们课程中的一张幻灯片使用以下语句:“define AANTAL MAX-MIN”那么这也不正确吗?是的,幻灯片不正确,或者至少是不正确的做法。加上括号,语句变成
rand()%(MAX-MIN+1)
,这迫使
MAX-MIN+1
首先进行评估。谢谢你,现在我明白了。如果你将此作为答案发布,我会接受它,这样你就可以获得声誉积分。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MIN 100
#define MAX 120
#define LENGTH MAX - MIN + 1
//Range is [MIN, MAX]

void write_arr(int const arr[], int amount)
{
    int i;
    for (i = 0; i < amount; i++) {
        printf("%-3d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    srand(time(NULL));
    int numbers[MAX - MIN];
    int i;
    for (i = 0; i < LENGTH; i++) {
        numbers[i] = i + MIN;
    }

    //write_arr(numbers, LENGTH);

    ///Now remove 20 random numbers -> We do this by setting the value of a number to something that can't occur normally (MIN-1)

    for (i = 0; i < LENGTH; i++) {
        int delete = rand() % (LENGTH); //<----------------- I can't remove these braces
        printf("%3d ", delete + MIN);
        numbers[delete] = MIN - 1;
    }
    printf("\n");

    //Now write all numbers that still have a valid value

    for (i = 0; i < LENGTH; i++) {
        if (numbers[i] != MIN - 1) {
            printf("%-3d ", numbers[i]);
        }
    }
    printf("\n");
    return 0;
}