Problem z programem odczytującym PESEL

0

Witam!
Napisałem program który wczytuje z klawiatury numer pesel. Po wpisaniu ma określić datę urodzenia oraz płeć danej osoby.Program ma zakończyć działanie jeżeli użytkownik nie wprowadzi numeru pesel i wciśnie enter. Problem tkwi w tym że dla roczników 2000 program źle oblicza miesiąc urodzenia i nie za bardzo wiem gdzie tkwi błąd.
Proszę o jakieś sugestie
, z góry dzięki :)
Niżej podaje kod bo nie chce mi wysłać załącznika : (Język C)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
    while (1) {
        int r, m, d, p, pus, rok;
        char Pesel[12];
        printf("Podaj Pesel: ");
        fgets(Pesel, 11, stdin);
        sscanf(Pesel, "%2d%2d%2d%3d%2d", &r, &m, &d, &pus, &p);
        fgets(Pesel, 11, stdin);
        if (Pesel[1] == 0)
            return 0;
        else {
            if (m / 20 == 0)
                rok = 1900 + r;
            else {
                if (m / 20 == 1)
                    ;
                rok = 2000 + r;
            }
            if (m / 20 == 4)
                rok = 1800 + r;
            printf("%02d-%02d-%d, ", d, m, rok);
            if (p % 2 == 0)
                printf("kobieta \n");
            else {
                printf("mezczyzna \n");
                printf("KONIEC\n");
            }
        }
    }
}
2

Nie odejmujesz od miesiąca 20, gdy jest powyżej 12...

I co to za średnik w linii 21???

0

średnik przez przypadek...
"Nie odejmujesz od miesiąca 20, gdy jest powyżej 12..." - nie za bardzo rozumiem o co chodzi

2
szymoniox111 napisał(a):

"Nie odejmujesz od miesiąca 20, gdy jest powyżej 12..." - nie za bardzo rozumiem o co chodzi

No miesiąc Ci chyba wychodzi powyżej 20, nie? Format Pesela jest taki (i nawet z tego korzystasz), że jak masz rok urodzenia >= 2000 to miesiąc jest powiększony o 20...

3
szymoniox111 napisał(a):

średnik przez przypadek...
"Nie odejmujesz od miesiąca 20, gdy jest powyżej 12..." - nie za bardzo rozumiem o co chodzi

Doczytaj jak działa pesel!
Jak ktoś jest urodzony w roku 19xx to wtedy miesiąc jest zapisany bezpośrednio.
Jak jest inne stulecie to wtedy do miesiąca jest dodawana odpowiednia wielokrotność 20.
Powinieneś jeszcze sprawdzać sumę kontrolną!

I nie pisz wszystkiego w main tylko zdefiniuj funkcję, która robi to czego potrzebujesz.

I na dodatek doczytaj dokumentację fgets bo masz błąd, który widać już po pierwszym zdaniu dokumentacji.

1

...i sprawdz wynik sscanf

1 użytkowników online, w tym zalogowanych: 0, gości: 1