2016-12-01 82 views
0

我试图在borland C++中运行这个c程序。 它显示“需要表达”,同时声明数组int holes[size]。 这是显示的唯一错误。我试图解决它,但它仍然显示相同的问题。我不能运行一个c程序

我该如何解决这个问题?

/* 
     * C Program to Implement Pigeonhole Sort 
     */ 
    #include <stdio.h> 

    #define MAX 7 

    void pigeonhole_sort(int, int, int *); 
    void main() 
    { 
     int a[MAX], i, min, max; 
     printf("enter the values into the matrix :"); 
     for (i = 0; i < MAX; i++) 
     { 
      scanf("%d", &a[i]); 
     } 
     min = a[0]; 
     max = a[0]; 
     for (i = 1; i < MAX; i++) 
     { 
      if (a[i] < min) 
      { 
       min = a[i]; 
      } 
      if (a[i] > max) 
      { 
       max = a[i]; 
      } 
     } 
     pigeonhole_sort(min, max, a); 
     printf("Sorted order is :\n"); 
     for (i = 0; i < MAX; i++) 
     { 
      printf("%d", a[i]); 
     } 
    } 

    /* sorts the array using pigeonhole algorithm */ 
    void pigeonhole_sort(int mi, int ma, int * a) 
    { 

     int size, count = 0, i; 
     int *current; 
     current = a; 
     size = ma - mi + 1; 
     int holes[size]; 
     for (i = 0; i < size; i++) 
     { 
      holes[i] = 0; 
     } 
     for (i = 0; i < size; i++, current++) 
     { 
      holes[*current-mi] += 1; 
     } 
     for (count = 0, current = &a[0]; count < size; count++) 
     { 
      while (holes[count]--> 0) 
      { 
       *current++ = count + mi; 
      } 
     }   
    } 
+1

你用C或C++编程吗?在第一种情况下,确保你的编译器知道VLA(C99和可能在上面)。在后面的例子中,使用STL的数据类型。 – Matthias

+1

只有新的编译器可以声明非常量大小的数组。 Borland不适合这个。你应该学习malloc或者使用一些不变的最大尺寸。 –

+2

@Matthias Borland C++太老了,不知道C99 –

回答

0
在功能pigeonhole_sort的第三个参数

声明一个指针和在调用语句要传递的阵列

+0

这是一条评论,而不是答案。 –

+0

@Michael Walz,<50代表不能写评论 – MrMuMu

+0

@NanonA你必须先获得该特权。 –

6

int holes[size]是一个可变长度数组(VLA),即“仅”是围绕特征在C中使用了17年,并且不被C++支持。

因此,您似乎有一个完全过时的编译器(Borland在过去的10年中没有发布任何编译器),或者您试图使用C++编译器编译C代码。两者都不会起作用。


如果“Borland的”你碰巧是指英巴卡迪诺C++ Builder中,那么你只需要告诉它来编译代码为C,而不是C++。

否则,您将不得不升级到现代C编译器,例如GCC/Mingw。例如,下载完全免费的Windows版本的Codeblocks IDE,该版本预装了该编译器。

+0

我使用Borland版本5.02,代码将如何?! – ssss

+1

@ssss这将是废话。 BC 5.02不支持C99,它不支持C++ 98。没有理由为什么你会在2016年使用BC 5.02。 – Lundin

+0

这是我们在学院使用的程序。我会尝试其他程序来运行它。感谢您的帮助@Lundin – ssss