Witam,
Mam program do napisania który wczytuje dane do tablicy 3 struktur o składnikach: imię, drugie imię, nazwisko oraz pesel. Program ma potem wyświetlać uporządkowane dane. Jednak po podaniu imienia wyskakuje mi komunikat o błędzie, który sam stworzyłem przy pomocy pętli while, po drugim razie wpisania imienia powinien chyba być znowu błąd (skoro za pierwszym razem wpisałem dobre imię a za drugim razem to samo wpisałem) a tutaj przechodzi mi do wczytywania drugiego imienia. Tak wygląda pętla z warunkiem wczytująca imię:
puts("\nPodaj imie:");
while(fgets(osoba_parametr[i].imiona_zmienna.p_imie, 24, stdin)==NULL || osoba_parametr[i].imiona_zmienna.p_imie[0]=='\n');
{
puts("\nNie podano imienia, sprobuj ponownie...");
while((ch=getchar())!='\n');
}
Czy coś jest w niej nie tak? Oczywiście while((ch=getchar())!='\n'); ma płukać bufor ze śmieci (nie wiem czy na pewno to będzie potrzebne może ktoś wie).
A tak wygląda cały program:
#include <stdio.h>
#include <string.h>
int i;
char ch;
struct imiona {
char p_imie[24];
char d_imie[24];
char nazwisko[24];
} imiona_zmienna;
struct osoba {
struct imiona imiona_zmienna;
char pesel[11];
} osoba_zmienna[3];
void pobierz_tablice(struct osoba * osoba_parametr);
void pokaz_tablice(struct osoba * osoba_paramter);
int main(void)
{
pobierz_tablice(osoba_zmienna);
pokaz_tablice(osoba_zmienna);
puts("\nNacisnij [enter], aby wyjsc");
getchar();
return 0;
}
void pobierz_tablice(struct osoba * osoba_parametr)
{
puts("\nPodaj 3 zestawy danych na temat osob\n");
for(i=0; i<3; i++)
{
puts("\nPodaj imie:");
while(fgets(osoba_parametr[i].imiona_zmienna.p_imie, 24, stdin)==NULL || osoba_parametr[i].imiona_zmienna.p_imie[0]=='\n');
{
puts("\nNie podano imienia, sprobuj ponownie...");
while((ch=getchar())!='\n');
}
puts("\nPodaj drugie imie lub wcisnij [enter] na poczatku wiersza gdy go nie ma: ");
fgets(osoba_parametr[i].imiona_zmienna.d_imie, 24, stdin);
while((ch=getchar())!='\n');
puts("\nPodaj nazwisko:");
while(fgets(osoba_parametr[i].imiona_zmienna.nazwisko, 24, stdin)==NULL || osoba_parametr[i].imiona_zmienna.nazwisko[0]=='\n');
{
puts("\nNie podano nazwiska, sprobuj ponownie...");
while((ch=getchar())!='\n');
}
while((ch=getchar())!='\n');
puts("\nPodaj pesel:");
while(fgets(osoba_parametr[i].pesel, 12, stdin)==NULL || strlen(osoba_parametr[i].pesel)!=11)
{
puts("\nNieprawidlowy pesel, sprobuj ponownie...");
while((ch=getchar())!='\n');
}
while((ch=getchar())!='\n');
}
return;
}
void pokaz_tablice(struct osoba * osoba_parametr)
{
puts("\nZebrano nastepujace dane:\n ");
for(i=0; i<3; i++)
{
if(osoba_parametr[i].imiona_zmienna.d_imie[0]=='\n')
printf("%26s, %-26s\n", osoba_parametr[i].imiona_zmienna.p_imie, osoba_parametr[i].pesel);
else
printf("%26s, %c. %-26s\n", osoba_parametr[i].imiona_zmienna.p_imie, osoba_parametr[i].imiona_zmienna.d_imie[0], osoba_parametr[i].pesel);
}
return;
}
Proszę bardzo o pomoc, nie mogę już dłużej stać w miesjcu przez ten program i dlatego piszę o tym na forum.