[英]Can not run this C program - File Scope Error
我正在嘗試使用(Eratosthenes 篩分法)方法找到素數,但是當我運行我的程序時,我在 CLion 中遇到了以下錯誤。 錯誤是關於第 6 行中的 ara[size]。我該如何解決並運行我的程序? 我的代碼中沒有看到任何其他錯誤。 還有什么方法可以使我的代碼比這種方法更有效?
**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;
}
不能在 C 中使用 const 定義數組。 有一個很好的解釋在這里。
相反,正確的方法是使用#define。
因此,如果您從此更改數組聲明:
const int size = 40;
int ara[size];
對此:
#define size 40
int ara[size];
它會編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.