Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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_Algorithm_Debugging_Testing - Fatal编程技术网

无法运行此C程序-文件作用域错误

无法运行此C程序-文件作用域错误,c,algorithm,debugging,testing,C,Algorithm,Debugging,Testing,我正试图用(埃拉托斯的筛子)方法找到素数,但当我运行我的程序时,我在CLion中得到了以下错误。错误是关于第6行中的ara[大小]。我如何修复它并运行我的程序?我在代码中没有看到任何其他错误。还有什么方法可以使我的代码比这种方法更有效 **error: variably modified 'ara' at file scope 6 | int ara[size]; | ^~~ make[3]: *** [CMakeFiles/C_Practise.dir/build.

我正试图用(埃拉托斯的筛子)方法找到素数,但当我运行我的程序时,我在CLion中得到了以下错误。错误是关于第6行中的ara[大小]。我如何修复它并运行我的程序?我在代码中没有看到任何其他错误。还有什么方法可以使我的代码比这种方法更有效

**error: variably modified 'ara' at file scope
    6 | int ara[size];
      |     ^~~
make[3]: *** [CMakeFiles/C_Practise.dir/build.make:83: CMakeFiles/C_Practise.dir/main.c.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:96: CMakeFiles/C_Practise.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:103: CMakeFiles/C_Practise.dir/rule] Error 2
make: *** [Makefile:138: C_Practise] Error 2"**


    #include <stdio.h>
    #include <math.h>
    
    const int size = 40;
    int ara[size];
    
    void print_ara()
    {
        int i;
    
        for(i = 2; i < size; i++){
            printf("%4d", ara[i]);
        }
        printf("\n");
        for(i = 2; i < size; i++){
            printf("----");
        }
        printf("\n");
        for(i = 2; i < size; i++){
            printf("%4d", i);
        }
        printf("\n\n\n");
    }
    
    void sieve()
    {
        int i, j , root;
    
        for(i = 2; i < size; i++){
            ara[i] = 1;
        }
    
        root = sqrt(size);
        print_ara();
        for(i = 2; i <= root; i++){
            if(ara[i] == 1){
                for(j = 2; i * j <= size; j++)
                {
                    ara[i * j] = 0;
                }
                print_ara();
            }
        }
    }
    
    int is_prime(int n)
    {
        int i;
    
        if(n < 2) {
            return 0;
        }
    
        return ara[n];
    }
    
    int main()
    {
        int n, m;
    
        sieve();
    
        while (1){
            printf("Please enter a number(enter 0 to exit): ");
            scanf("%d", &n);
    
            if(n == 0) {
                break;
            }
            if(n >= size) {
                printf("The number should be less than %d\n", size);
                continue;
            }
    
            if(1 == is_prime(n)) {
                printf("%d is a prime number.\n", n);
            } else{
                printf("%d is not a prime number.\n", n);
            }
        }
        return 0;
    }
**错误:在文件范围内可变地修改了“ara”
6 |国际ara[尺寸];
|     ^~~
make[3]:***[CMakeFiles/C_practice.dir/build.make:83:CMakeFiles/C_practice.dir/main.C.o]错误1
make[2]:***[CMakeFiles/Makefile2:96:CMakeFiles/C_practice.dir/all]错误2
make[1]:***[CMakeFiles/Makefile2:103:CMakeFiles/C_practice.dir/rule]错误2
make:**[Makefile:138:C_Practice]错误2“**
#包括
#包括
常数int size=40;
int ara[尺寸];
无效打印_ara()
{
int i;
对于(i=2;i对于(i=2;i,不能用常量定义C中的数组。对此有很好的解释

相反,正确的方法是使用#define

因此,如果您从以下位置更改数组声明:

const int size = 40;
int ara[size];
为此:

#define size 40
int ara[size];

它将被编译。

您不能用常量来调整c数组的大小,它必须是一个文本,即a#DEFINE的直数