zhuangzitao 发表于 2021-9-23 17:24:45

请教下各位大佬,为什么数组不可以用等号重新赋值?

本帖最后由 zhuangzitao 于 2021-9-23 17:27 编辑

我用dev-c++,一开始这样写,到最后报错
#include <stdio.h>

int main(void)
{
        int digit_seen = {0};
        int digit;
        long n;
       
        while (1) {
                printf("Enter a number: ");
                scanf("%ld", &n);
               
                if (n <= 0)
                        break;
               
                while (n > 0) {
                        digit = n % 10;
                        digit_seen++;
                        n /= 10;
                }
               
                printf("Digit:   \t0 1 2 3 4 5 6 7 8 9\n");
                printf("Occurrences:\t");
                for (digit = 0; digit < 10; digit++)
                        printf("%d ", digit_seen);
                putchar('\n');
                digit_seen = 0; //这里报错
        }

        return 0;
}

改成这样就可以正常运行了,这是为什么?
#include <stdio.h>

int main(void)
{
        int digit_seen = {0};
        int digit;
        long n;
       
        while (1) {
                printf("Enter a number: ");
                scanf("%ld", &n);
               
                if (n <= 0)
                        break;
               
                while (n > 0) {
                        digit = n % 10;
                        digit_seen++;
                        n /= 10;
                }
               
                printf("Digit:   \t0 1 2 3 4 5 6 7 8 9\n");
                printf("Occurrences:\t");
                for (digit = 0; digit < 10; digit++)
                        printf("%d ", digit_seen);
                putchar('\n');
                for (digit = 0; digit < 10; digit++)
                        digit_seen = 0;
        }
       
        return 0;
}

zhuangzitao 发表于 2021-9-23 17:26:48

我加个注释写明报错位置
int main(void)
{
      int digit_seen = {0};
      int digit;
      long n;
      
      while (1) {
                printf("Enter a number: ");
                scanf("%ld", &n);
               
                if (n <= 0)
                        break;
               
                while (n > 0) {
                        digit = n % 10;
                        digit_seen++;
                        n /= 10;
                }
               
                printf("Digit:   \t0 1 2 3 4 5 6 7 8 9\n");
                printf("Occurrences:\t");
                for (digit = 0; digit < 10; digit++)
                        printf("%d ", digit_seen);
                putchar('\n');
                digit_seen = 0; //这里报错
      }

      return 0;
}

jackz007 发表于 2021-9-23 17:37:05

      int digit_seen = {0};    /* 这个数组的下标范围是 0 ~ 9,所以,语句 digit_seen = 0 的下标 10 已经超出了允许范围,从而出现了下标越界错误。*/
页: [1]
查看完整版本: 请教下各位大佬,为什么数组不可以用等号重新赋值?