Почему я получаю ошибку сегментации и как мне ее решить? - PullRequest
0 голосов
/ 01 июля 2019

C программа для пузырьковой сортировки, использующая минимум 4 функции (вход, выход, вычисление, основной)

  • Глобальные переменные не допускаются.
  • Нет printf или scanf в compute.
  • Нет printf или scanf в main
  • Ввод не должен вызывать compute.
  • compute не следует звонить output.

Я не совсем понял указатели и функции.

    #include <stdio.h>

    void input(int* size, int* arr[])
    {
        printf("Enter the size of the array: ");
        scanf("%d",size);

        printf("Enter the elements of the array\n");
        for(int i = 0;i < *size; i++)
        {
            scanf("%d", arr[i]);
        }
    }

    void swap(int *x,int *y)
    {
        int temp = *x;
        *x = *y;
        *y = temp;
    }

    void bubble_sort(int arr[100],int size)
    {
        for(int i = 0;i < size - 1;i++)
        {
            for(int j = 0;j < size - 1 - i;j++)
            {
                if(arr[j] > arr[j+1])
                {
                    swap(&arr[j],&arr[j+1]);
                }
            }
        }
    }

    void output(int size,int* arr)
    {
        printf("Sorted array\n");
        for(int i = 0;i < size;i++)
        {
            printf("%d",arr[i]);
        }
    }

    int main()
    {

        int* input_values[50];
        int size;
        input(&size, input_values);
        bubble_sort(size,*input_values);
        output(size, *input_values);
        return 0;
    }

Нет ошибок, но отображается ошибка сегментации. Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

На самом деле ваш код полон ошибок, таких как использование scanf и использование указателей и массивов. Ниже приведена работоспособная версия кода, который вы видите и сравниваете:

#include <stdio.h>

void input(int* size, int arr[])
{
    char chr;
    printf("Enter the size of the array: ");
    scanf( "%d%c", size, &chr );

    printf("Enter the elements of the array\n");
    for(int i = 0;i < *size; i++)
    {
        scanf("%d%c", &arr[i], &chr);
    }
}

void swap(int *x,int *y)
{
    int temp = *x;
    *x = *y;
    *y = temp;
}

void bubble_sort(int* size,int arr[])
{
    for(int i = 0;i < *size - 1;i++)
    {
        for(int j = 0;j < *size - 1 - i;j++)
        {
            if(arr[j] > arr[j+1])
            {
                swap(&arr[j],&arr[j+1]);
            }
        }
    }
}

void output(int* size,int arr[])
{
    printf("Sorted array\n");
    for(int i = 0;i < *size;i++)
    {
        printf("%d",arr[i]);
    }
}

int main()
{

    int input_values[50];
    int s = 0;
    int* size = &s;
    input(size, input_values);
    bubble_sort(size,input_values);
    output(size, input_values);
    return 0;
}  
0 голосов
/ 01 июля 2019

Итак, ваша проблема здесь:

scanf(" %d", arr[i]);

Вы должны изменить это на:

scanf(" %d", &arr[i]);

Это основная проблема, но есть много других.Также необходимо изменить порядок параметров в

bubble_sort(size,*input_values);

на

bubble_sort(input_values,size); 

и

output(size, *input_values); 

на

output(size, input_values);

Такжечтобы это работало вообще, я изменил

scanf("%d", &arr[i]);

на

scanf(" %d", &arr[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...