tablica dynamiczna

tablica dynamiczna
AC
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:11
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:

Kopiuj
#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;
}
kq
mbyś psć cłmi słwi?
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:minuta
  • Lokalizacja:Szczecin
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ć.


AC
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:11
0

zamieniłem funkcje porownaj_int na tą:

Kopiuj
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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:minuta
  • Lokalizacja:Szczecin
1

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


AC
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:11
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.