Problem z instrukcją if...else przy podawaniu daty urodzin na podst. PESEL-u
Ostatnio zmodyfikowano 2015-05-23 14:20
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. #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 ) 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 |
|
michal11 |
» 2015-05-23 01:35:05 Nie tak się przypisuje do zmiennej |
|
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. |
|
Glazus |
» 2015-05-23 10:39:14 Twoja tablica jest za mała na numer PESEL |
Czemu? |
|
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ć ? |
|
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. |
|
StudentIB Temat założony przez niniejszego użytkownika |
» 2015-05-23 12:28:02 Działa ! Dziękuję bardzo za pomoc :-) |
|
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 ? |
|
« 1 » 2 |