Witam,
mam do napisania program w C (nie C++), który będzie wczytywał z klawiatury dane dotyczące zawodów sportowych (np. imie, nazwisko, czas biegu, dystans). Tych danych (osób) ma być max. 50. Moim zadaniem jest posortowanie ich w zależności (do wyboru) wg nazwisk, czasów, dystansów.
Teraz moje pytanie, jak w C można (czy można?) prawidłowo zrobić tablice dwuwymiarowe stringów, bo to chyba byłoby najprostsze rozwiązanie można by tylko porównywać konkretne współrzędne (kolumny) z wiersza z tymi samymi w następnych wierszach.
Chyba, że może ktoś ma inny pomysł.
Z góry dzięki.
[C] Tablica wielowymiarowa stringów
- Dasio11
- Moderator
- Posty: 10223
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2361 razy
[C] Tablica wielowymiarowa stringów
W języku C napisem jest tablica charów, więc dwuwymiarowa tablica napisów 50x4, każdy długości 30, wygląda tak:
a posługiwać się nią można tak:
Myślę jednak, że w twoim przypadku lepszym rozwiązaniem będzie użycie struktur:
Coś jeszcze dodam: powyższy kod dobrze sprawdzi się na pracownię / do użytku własnego, lecz jest podatny na tzw. błąd przepełnienia bufora. Aby go uniknąć, należałoby zamiast funkcji
Kod: Zaznacz cały
char Tablica[50][4][30];
Kod: Zaznacz cały
strcpy( Tablica[5][0], "Jan" ); // Imię szóstej osoby = "Jan"
scanf( "%s", Tablica[8][1] ); // Wczytaj nazwisko dziewiątej osoby
Myślę jednak, że w twoim przypadku lepszym rozwiązaniem będzie użycie struktur:
Kod: Zaznacz cały
struct Dane
{
char Imie[30];
char Nazwisko[50];
float Czas;
int Dystans;
};
struct Dane Tablica[50];
scanf( " %s", Tablica[0].Imie );
scanf( " %s", Tablica[0].Nazwisko );
scanf( " %f", &Tablica[0].Czas );
scanf( " %d", &Tablica[0].Dystans );
...
scanf
użyć fgets
, z czym jest więcej roboty, ale jest bezpiecznie.-
- Użytkownik
- Posty: 1588
- Rejestracja: 16 maja 2013, o 17:56
- Płeć: Mężczyzna
- Lokalizacja: Trójmiasto
- Podziękował: 11 razy
- Pomógł: 245 razy
[C] Tablica wielowymiarowa stringów
żeby nie pisać wszędzie struct można zastosować taką składnię:
i wtedy deklarujesz to jako
Kod: Zaznacz cały
typedef struct Zawodnik {
char imie[30];
char nazwisko[30];
int dystans;
double czas;
} Zawodnik;
Kod: Zaznacz cały
Zawodnik tablica[50];