Witam. Napisałem taki programik, który kompiluje się, ale w wykonaniu sie wykłada. Jest problem z pętlą wczytywania nazwisk. Wczytywanie powinno się zakończyć po wpisaniu pustego nazwiska (a następnie posortowane po kodzie i wypisane), ale coś się chrzani i nie bardzo wiem co. Jest problem z wyjściem z pętli wczytywania. Podpowiedzcie proszę coś.
#include <stdio.h>/właczanie plików bibliotecznych/
#include <stdlib.h>
#include <string.h>
//struktura danych pojedyńczej osoby
struct osoba{
char kod[3]; // kod 3 elementowy
long int zar; // wysoko?ć zarobków
char im[30]; // imię przyjęte max. 30 liter
char nazw[30]; // nazwisko przyjęte max. 30 liter
}tab[40]; // zmienna typ tablica 40 elementowa zawieraj?ca osoby
//funkcja prownania 2 elementow
int porownaj(struct osoba, struct osoba); // deklaracja funkcji
int porownaj(struct osoba a, struct osoba b)
{
if (strcmp(a.kod, b.kod) >0) return 0; // kod - osoba a wieksza od b
if (strcmp(a.kod, b.kod) <0) return 1; // kod - osoba b wieksza od a
if (a.zar>=b.zar) return 1; // zarobki - osoba a większa lub równa b
return 0; // zarobki - osoba a mniejsza od b
};
int main()
{
int i, j, i_pom, ile; // i,j zmienne przesuwania w tablicy, i_pom zmienna pomocnicza
struct osoba pom; // ile to ilo?ć osób w tablicy
i=0;
while (1) // czytanie z klawiatury do?óki wyrażenie jest prawdziwe
{
if (i==39) break;
printf ("Podaj nazwisko: \n");
scanf ("%s", &tab[i].nazw);
if (tab[i].nazw[0]=='\n')
{
printf("Zakonczyles wprowadzanie. Teraz nastąpi sortowanie\n");
break;
};
printf ("Podaj imie: \n");
scanf ("%s", &tab[i].im);
printf ("Podaj kod: \n");
scanf ("%s", &tab[i].kod);
printf ("Podaj zarobki: \n");
scanf ("%d", &tab[i].zar);
i++;
};
ile=i;
//sortowanie po kodzie
for (i=0; i<ile-1; i++) {
i_pom=i;
pom=tab[i];
for (j=i+1; j<ile; ++j)
if (porownaj(tab[j], pom)) {
i_pom=j; pom=tab[j];
};
tab[i_pom]=tab[i];
tab[i]=pom;
};
// wyswietlanie wyniku posortowanego
for (i=0; i < ile; i++)
{
printf (" nazwisko: %s ",tab[i].nazw ); // wy?wietlanie i-tego nazwiska
printf (" imie: %s ",tab[i].im ); // wy?wietlanie i-tego imienia
printf (" kod: %s ",tab[i].kod ); // wy?wietlanie i-tego kodu
printf (" zarobki: %d \n",tab[i].zar ); // wy?wietlanie zarobków
};
}