Witajcie!
Piszę program na zajęcia z C, ma to być taka baza danych o znajomych. Kiedy wpisuje dane osób z klawiatury program nie wiem dlaczego, ale kończy działanie po pierwszym obiegu pętli. Poniżej wklejam fragment kodu.
Dla przykładu, wpisuję że chcę dodać 2 osoby, wpisuje ich dane i program kończy działanie po pierwszym przebiegu pętli. Być może błąd jest w funkcji z peselem, gdyż kiedy miałem w pętli tylko funkcje z imieniem i nazwiskiem działało poprawnie. Sam niestety nie potrafię znaleźć w tym błędu, a męczyłem się z tym naprawdę długo.
Pozdrawiam i proszę o porady :))
#include<stdio.h>
#include<string.h>
struct baza{
char imie[30];
char nazwisko[30];
char pesel[12];
char email[40];
char tel[20];
char data[14];
char plec[10];
};
int i,a,pl,b,e,c,err,k,n,pp;
struct baza osoba[5]; // tablica struktur
int kontrolna;
void imie(struct baza *p,int y){ //funkcje dodajace kolejne dane i funkcje sprawdzające poprawność danych
p=p+y; //zwiekszenie wskaźnika tak by działał na odpowiedniej strukturze
printf("\nPodaj imie: ");
scanf("%s",p->imie);
}
int testimie(struct baza *p,int i){
a=0;b=0;
p=p+i;
if(strlen(p->imie)>30){
a++;
printf("\nWpisales zbyt dluga nazwe! Spróbuj jeszcze raz");
}
for(i=0;i<strlen(p->imie);++i){
if(p->imie[i]>'0' &&p->imie[i]<'9')
b++;
}
if(b)
printf("Wyrażenie zawiera niedozwolone znaki");
if(a>0 || b>0) return 0;
else
return 1;
}
void nazwisko (struct baza*w,int y){
w=w+y;
printf("\nPodaj nazwisko: ");
scanf("%s", w->nazwisko);
}
int testnazwisko (struct baza*p,int i){
p=p+i;
a=0;b=0;
if(strlen(p->nazwisko)>30){
printf("\nWpisales zbyt dluga nazwe!");
a++;
}
for(i=0;i<strlen(p->nazwisko);++i){
if(p->nazwisko[i]>'0' &&p->nazwisko[i]<'9')
b++;
}
if(b)
printf("Wyrażenie zawiera niedozwolone znaki");
if(a>0 || b>0) return 0;
else
return 1;
}
void pesel (struct baza *p,int y){
p+=y;
printf("\nPodaj PESEL: ");
scanf("%s", p->pesel);
}
int testpesel (struct baza *rp,int y){
rp+=y;
a=0;
if(strlen(rp->pesel)!=11){
printf("\nPESEL powinien zawierac 11 znakow!");
return 0;
}
for(i=0;i<strlen(rp->pesel);++i)
if(rp->pesel[i]<'0' || rp->pesel[i] >'9') ++a;
if(a>0){
printf("\nPodany PESEL zawiera bledne dane");
return 0;
}
kontrolna=rp->pesel[0]-48 + 3* (rp->pesel[1] -48) + 7* (rp->pesel[2] -48) + 9* (rp->pesel[3] -48)+ rp->pesel[4]-48 + 3* (rp->pesel[5]-48) +7*( rp->pesel[6]-48) + 9*( rp->pesel[7]-48) + rp->pesel[8]-48 + 3*(rp->pesel[9]-48);
kontrolna=kontrolna%10;
if(kontrolna){
kontrolna=10-kontrolna;
if(kontrolna+48 != rp->pesel[10]){
return 0;
}}
else{
if(kontrolna +48 !=rp->pesel[10]){
return 0;
}
}
printf("\nPESEL poprawny.");
return 1;
}
int main(){
int w,ilu,l;
printf("Ile osób chcesz dodac");
scanf("%d",&ilu);
for(i=0;i<ilu;i++){ // pętla, o której wspominałem
do{
imie(osoba,i); // do funkcji przekazuje nazwę tablicy czyli adres pierwszego elementu
l=testimie ( osoba,i);
}
while(l==0);
do{
nazwisko(osoba,i);
l=testnazwisko ( osoba,i);
}
while(l==0);
do{
pesel(osoba,i);
l= testpesel ( osoba,i);
}while(l==0);
}
system("pause");
}