C中的计数排序-错误:使用未声明的标识符

C中的计数排序-错误:使用未声明的标识符,c,arrays,sorting,counting,C,Arrays,Sorting,Counting,我试图编写一个使用计数排序算法的函数,但是当我试图编译它时,它说输出数组和计数数组是未声明的,尽管我已经声明它们为int类型数组 #include <stdio.h> #include <stdlib.h> #include "input_blatt01.h" int MAX_LAENGE = 1000; int MAX_VALUE = 100; int i, k, j; void count_sort_calculate_counts(int input_array[

我试图编写一个使用计数排序算法的函数,但是当我试图编译它时,它说输出数组计数数组未声明的,尽管我已经声明它们为int类型数组

#include <stdio.h>
#include <stdlib.h>
#include "input_blatt01.h"

int MAX_LAENGE = 1000;
int MAX_VALUE = 100;
int i, k, j;
void count_sort_calculate_counts(int input_array[], int len, int count_array[])
{
    for (i=0; i<=len;i++)
    {
        count_array[i] = 0;
    }
    for (j=1; j<=len;j++)
    {
        count_array[input_array[j]] = count_array[input_array[j]] + 1;
    }
}

void count_sort_write_output_array(int output_array[], int len, int count_array[])
{
    k=0;
    for (j=1;j<=len;j++)
    {
        for (i=1; i<=count_array[j]; i++)
        {
            output_array[k] = j;
            k = k + 1;
        }
    }
}



int main(int argc, char *argv[]) {

    if (argc < 2){
        printf("Aufruf: %s <Dateiname>\n", argv[0]);
        printf("Beispiel: %s zahlen.txt\n", argv[0]);
        exit(1);
    }

    char *filename = argv[1];

    int input_array[MAX_LAENGE];  
    int len = read_array_from_file(input_array, MAX_LAENGE, filename);

    printf("Unsortiertes Array:");
    print_array(input_array, len);
    int i, k, j;
    count_sort_calculate_counts(input_array, len, count_array);
    count_sort_write_output_array(output_array, len, count_array);

    printf("Sortiertes Array:");
    print_array(output_array, len);

    return 0;
}
#包括
#包括
#包括“input_blatt01.h”
int MAX_LAENGE=1000;
int MAX_值=100;
int i,k,j;
无效计数\排序\计算\计数(整数输入\数组[],整数长度,整数计数\数组[])
{

对于(i=0;i我在
main
函数中没有看到输出数组和计数数组的声明,因此它不“知道”关于它们。阅读变量作用域。编辑:我想它可以重新制作,以便您可以向数组传递指针。

您声明了
输出数组
计数数组
作为以下函数的参数:

void count_sort_calculate_counts(int input_array[], int len, int count_array[])
void count_sort_write_output_array(int output_array[], int len, int count_array[])
但是您没有在
main
函数中声明
output\u array
count\u array

你可能需要这个:

...
int input_array[MAX_LAENGE];  
int output_array[MAX_LAENGE];   // <<< add this
int count_array[MAX_LAENGE];    // <<< add this 
int len = read_array_from_file(input_array, MAX_LAENGE, filename);
...
。。。
int输入数组[MAX_LAENGE];

int输出_数组[MAX_LAENGE];//显示编译器的精确输出。顺便说一句,我在
main
中没有看到
output\u array
count\u array
的任何声明。这可能就是你问题的答案。小心一个错误和访问循环中的越界元素。数组索引从
0
开始,转到
n-1
。所以我的循环从
1
开始(可能是对的:我没有研究代码),有些循环将
n
作为数组索引。谢谢!它解决了我的问题,虽然现在我得到了错误“Segmentation fault:11”,但这是有问题的,因为我在数组中犯了一些错误。int input\u array[]-我可能忘记了一切,但据我记忆所及,int-input_-array[]将创建一个足以容纳数据的数组。