tablica dynamiczna

0

Mam pewien problem, ćwiczyłem tak sb, wróciłem troche wstecz i zrobiłem takie proste zadanko z sortowaniem tablicy danej wskaźnikiem, i nwm dlaczego przy wpisywaniu zmiennych program się wywala, ktoś pomoże bo nie daje mi to spokoju:

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

int porownaj_int( const void* a, const void* b )
    {
     int* arg1 = (int*) a;
     int* arg2 = (int*) b;
     if( *arg1 < *arg2 ) return -1;
     else if( *arg1 == *arg2 ) return 0;
     else return 1;
    }
int main()

{
    int n,i;
    printf("podaj liczbe elementow:");
    scanf("%d",&n);
    printf("podawaj kolejno liczby:\n");
    double* liczby=(double*)malloc(sizeof(double)*n);;
     for(i=0;i<n;i++)
     {
         scanf("%lf",liczby[i]);
     }
     qsort(liczby, n, sizeof(double), porownaj_int);
     printf("\nposortowane:\n");
     for(i=0;i<n;i++)
     {
         printf("%lf",liczby[i]);
     }
    return 0;
}
2

Dlaczego double porównujesz rzutując na int? To jest UB, więc teoretycznie może się zdarzyć cokolwiek.

liczby[i] to lvalue - wartość komórki. scanf oczekuje wskaźnika na element, który ma zapisać.

0

zamieniłem funkcje porownaj_int na tą:

double porownaj_int( const void* a, const void* b )
    {
     double* arg1 = (double*) a;
     double* arg2 = (double*) b;
     if( *arg1 < *arg2 ) return -1;
     else if( *arg1 == *arg2 ) return 0;
     else return 1;
    }

do scanfa dodalem kwantyfikator "&" i juz program sie nie wywala,
tyle ze teraz problem polega na tym ze jest źle posortowane, co mnie troche dziwi bo uzywam qsort niepierwszy raz

1

Zmień też nazwę, bo jest myląca. I zwracaj int, a nie double.

0

ok dzieki, teraz dziala, zapomniale ze te 0,1,-1 do qsort musi byc typu int

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0