sprawdzanie płci z numeru PESEL

sprawdzanie płci z numeru PESEL
0

Witam wszystkich!
Mam problem, gdyż mam napisać program, który sprawdza i podaje płeć na podstawie danego numeru PESEL. Napisałem poniższy program, ale muszę konieczne zastosować w nim pętlę i sprawić, by w przypadku wciśnięcia po prostu klawisza ENTER zamiast podania kodu PESEL program automatycznie kończył działanie. Proszę o możliwie szybką pomoc!
Kod:

#include <stdio.h>
int main()
{
char tab[12];
printf("Podaj swoj numer PESEL: \n");
scanf("%s",tab);
if (tab[9] & 1) printf("Posiadacz powyzszego numeru PESEL jest mezczyzna.\n");
else printf("Posiadacz powyzszego numeru PESEL jest kobieta.\n");
return 0;
}

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
0

Czytaj znak po znaku.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

#include <stdio.h>
int main()
{
char tab[12];
printf("Podaj swoj numer PESEL: \n");
for(int i=0;i<=10;i++)
{
scanf("%d",&tab[i]);
}
if (tab[9] & 1) printf("Posiadacz powyzszego numeru PESEL jest mezczyzna.\n");
else printf("Posiadacz powyzszego numeru PESEL jest kobieta.\n");
return 0;
}

Teraz jest z pętlą, kompiluje się ale później na końcu jest błąd. Czy da się zrobic to w pętli, ale tak żeby nie trzeba było zatwierdzać wpisanej liczby enterem? I jak zrobić, by w przypadku wcisniecia ENTER zamiast najpierw jakiejś liczby program kończył działanie? Z góry dziękuję za pomoc, niby prosty program a takie mam problemy...

Asmal
if (tab[9] & 1) - co oznacza ta instrukcja? XD
ShookTea
&amp; to koniunkcja bitowa. Zwraca liczbę, w której bit 1 jest tylko tam, gdzie bit 1 znajduje się zarówno w lewej, jak i w prawej liczbie, zatem w przypadku działania &amp; 1 zostanie zwrócone 1 tam, gdzie liczba zapisana w bitach kończy się jedynką (a więc liczba nieparzysta), zaś 0 tam, gdzie liczba kończy się zerem (a więc parzysta).
0

Ta instrukcja służy do sprawdzania czy liczba jest parzysta, czy nie. Czy się mylę?

Asmal
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Olsztyn
0

Według mnie powinno być tab[9]%2==0. Tak bym to napisał w c++, chociaż w c może być inaczej :P

_13th_Dragon
if (tab[9] &amp; 1) jest poprawny zapisem w C oraz w C++
Asmal
haha XD im więcej piszę na forum tym więcej się dowiaduje XD
SO
@Asmal no jeśli C/C++ nauczyłeś się w 1.5h tak jak twierdzisz, że zrobiłeś to z PHP to się nie ma co dziwić.
_13th_Dragon
Ba w PHP to też poprawny zapis :D
Asmal
Nie powiedziałem że nauczyłem że c++ w 1,5h. Napisałem że nauczyłem się podstaw php w 1,5h ;)
0

Niestety nie w tym rzecz, bo ze zwykłym dzieleniem modulo jest to samo :/ Bardzo proszę o kolejne komentarze

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
0
Kopiuj
char tab[12]={0};
printf("Podaj swoj numer PESEL: ");
for(int i=0;i<11;++i) scanf("%c",&tab[i]);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

Dziękuję bardzo, pozostał jednak problem: jak zakończyć działanie programu w przypadku wciśnięcia klawisza ENTER przed uprzednim wpisaniem kodu PESEL? Trzeba użyć pętli while?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
0
Kopiuj
int i;
for(i=0;i<11;++i) if((scanf("%c",&tab[i])!=1)||(tab[i]=='\n')) break;
if(i!=11) return 1;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

Hmm.. Teraz znowu gdy naciskam ENTER, to dodatkowo pojawia mi się któraś z instrukcji z tego ostatniego ifa poza pętlą. Oto kod:
#include <stdio.h>
int main()
{
char tab[12]={0};
printf("Podaj swoj numer PESEL: \n");
for(int i=0;i<11;i++)
{
if((scanf("%c",&tab[i])!=1)||(tab[i]=='\n')) break;
}
if (tab[9]&1) printf("Posiadacz powyzszego numeru PESEL jest mezczyzna.\n");
else printf("Posiadacz powyzszego numeru PESEL jest kobieta.\n");
return 0;
}

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
0

Bo jest trzy istotne różnicy.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
0

Dobra, już sobie poradziłem, dziękuję bardzo wszystkim za pomoc! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.