Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z instrukcją if...else przy podawaniu daty urodzin na podst. PESEL-u

Ostatnio zmodyfikowano 2015-05-23 14:20
Autor Wiadomość
StudentIB
Temat założony przez niniejszego użytkownika
Problem z instrukcją if...else przy podawaniu daty urodzin na podst. PESEL-u
» 2015-05-23 01:15:00
Witam,

jestem początkujący. Napisałem w Dev-C++ prosty programik podający datę urodzenia po wpisaniu PESEL-u. Wszystko działa poprawnie oprócz instrukcji warunkowej if...else, która ma tu służyć do wyświetlania pierwszych 2 cyfr z roku urodzenia (w poprzedniej wersji program podawał tylko te cyfry z roku urodzenia, które są w PESEL-u). Założyłem tu dla uproszczenia, że jeśli pierwsza cyfra numeru PESEL jest równa 0 lub 1 (np. 0 dla roku 2003, 1 dla roku 2011) to na początku roku urodzenia musi być 20, natomiast dla pozostałych przypadków (np. 6 dla 1969) 19.
Niestety przy wpisywaniu jakiegokolwiek PESEL-u rok jest wyświetlany tylko jako np. 095 zamiast 1995.

C/C++
#include <iostream>
using namespace std;
int main()
{
   
    char pesel[ 11 ];
    cout << "Podaj swoj PESEL:" << endl;
    cin >> pesel;
    int poczatek_roku;
    if( pesel[ 0 ] == 0 || pesel[ 0 ] == 1 ) //operator logiczny LUB
   
         poczatek_roku == 20;
   
    else
   
         poczatek_roku == 19;
   
    cout << "Twoja data urodzenia (dd/mm/rr):" << pesel[ 4 ] << pesel[ 5 ] << "/" << pesel[ 2 ] << pesel[ 3 ] << "/" << poczatek_roku << pesel[ 0 ] << pesel[ 1 ] << endl;
    return 0;
}

Czy ktoś mógłby mi powiedzieć co zrobiłem źle ?

Z góry dziękuję za pomoc
P-132645
michal11
» 2015-05-23 01:35:05
Nie tak się przypisuje do zmiennej
P-132646
Monika90
» 2015-05-23 10:08:54
Twoja tablica jest za mała na numer PESEL, powinieneś użyć std::string.

Znak '1' to nie jest to samo co liczba 1.
P-132650
Glazus
» 2015-05-23 10:39:14
Twoja tablica jest za mała na numer PESEL
Czemu?   
P-132652
StudentIB
Temat założony przez niniejszego użytkownika
» 2015-05-23 10:49:26
Też mi się wydaje, że nie jest za mała, bo PESEL ma tylko 11 cyfr. Ale na wszelki wypadek powiększyłem ją do 20.

@michal11: zmieniłem operator porównania == na przypisania = w kodzie: poczatek_roku=20 oraz poczatek_roku=19 O to chodziło ?

@Monika90: Próbowałem zmienić typ tablicy na i int, bo rzeczywiście jakoś mi tu nie pasuje typ char, ale wyskakuje błąd.

Generalnie po zmianie tych operatorów obojętnie co wpiszę, pojawia się rok z 19 na początku, nigdy z 20.
Jak to można jeszcze poprawić ?
P-132653
Monika90
» 2015-05-23 11:19:53
Twoja tablica jest za mała na numer PESEL
Czemu?
PESEL ma 11 cyfr, a operator >> dodaje znak '\0' na końcu.

Generalnie po zmianie tych operatorów obojętnie co wpiszę, pojawia się rok z 19 na początku, nigdy z 20.
Jak to można jeszcze poprawić ?
Skoro w tablicy masz znaki, to porównuj ze znakami '0' i '1', a nie z liczbami 0 i 1.
P-132655
StudentIB
Temat założony przez niniejszego użytkownika
» 2015-05-23 12:28:02
Działa ! Dziękuję bardzo za pomoc :-)
P-132656
Glazus
» 2015-05-23 12:38:48
PESEL ma 11 cyfr, a operator >> dodaje znak '\0' na końcu.
Ale czy to tak naprawdę ma znaczenie w tym konkretnym przypadku? Interesuje nas tylko 11 znaków potrzebnych na PESEL. I owy pesel w poprawny sposób zostaje do tablicy zapisany. Dlaczego więc złą praktyką miałoby być użycie tutaj jedenastoelementowej tablicy
char
?
P-132657
« 1 » 2
  Strona 1 z 2 Następna strona