Problem w napisaniu programu - prośba o pomoc
Zacco1248
02.11.2013
Witam uczę się języka c++ z pewnego poradnika. Mam napisać program który :
Który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu:
1. Podaj liczbę
2. Jeżeli błąd, wróć do kroku 1.
3. Wypisz liczbę, która została podana.
No dobra mniej więcej wiem jak to zrobić. Napisałem taki oto kod:
#include <iostream> using namespace std ; int main() { cout << "Podaj liczbe = " ; int a; char sprawdzenie ; sprawdzenie = cin.fail(); do { cin >> a ; cout << "Sprawdzenie = " << a << sprawdzenie; } while(sprawdzenie == 0); return 0; }
Nie wiem czy jest dobrze dlatego pisze tutaj, ponieważ po wpisaniu liczby całkowitej każe mi wpisać jeszcze raz i tak bez końca, a po wpisaniu litery program wariuje i wypisuje ciągle " sprawdzenie = podana liczba całkowita ". Pomoże ktoś to ogarnąć? Z góry dzięki
GT Team 02.11.2013
#include // jakby usunelo include to iostream using namespace std ; int main() { char liczba; rep: cout << endl << "Podaj liczbe: "; cin >> liczba; if(isalpha(liczba)) { cout << endl << "Wystapil blad: " << liczba << " nie jest cyfra!"; goto rep; } cout << endl << "Liczba: " << liczba << " jest liczba calkowita!"; return 0; }Do tego przydała by się funkcja : isalpha(string[]) czyli sprawdza czy dany ciag znakow albo znak jest litera z alphabetu
http://www.cplusplus.com/reference/cctype/
DarkGL
03.11.2013
Argh ! Goto ? naprawdę ?! nabierasz zdecydowanie złych nawyków , nie rozprzestrzeniaj ich jak zarazy to że Ty używasz konstrukcji niepożadanych nie znaczy że inni muszą
po za tym widze tu bardziej pole dla int nie dla chara, może zabrzmi to troche niezrozumiale ale lepsze jest podejśćie whitelisty niż blacklisty
co znaczy że
Zabezpiecz przed wczytaniem nieprawidłowej liczby
jaka jest nieprawidłowa ?
Używająć int otrzymamy automatyczne rzutowanie !
Więc w praktyce nigdy nie uzyskamy czegoś innego niż liczba
Zacco1248
03.11.2013
A jakbym zrobił coś takiego? Tylko problem w tym, że bez różnicy czy wpisze cyfre czy liczbe i tak pokazuje ze wybralem dobrą. Co w tym jest źle?
#include <iostream> using namespace std ; int main() { int liczba; cout << "Podaj liczbe rzeczywista = "; cin >> liczba; if ( liczba > 0) cout << "Brawo napisales dobra liczbe "; else do { cout << "Zla liczba podaj jeszcze raz"; } while(liczba < 0); return 0; }
Dobra ogarnąłem temat można zamknąć
Edited by Zacco1248, 03.11.2013 01:11.
GT Team 03.11.2013
sebul
03.11.2013
To lepiej nigdy go nie używaj.Pozwlę się spytać DarGL w czym źle napisałem, kod jest dobrze napisany,a goto nie używam zbyt często.
sebul
03.11.2013
GT Team 03.11.2013
DarkGL
03.11.2013
Goto zaburza czytelność i przepływ kodu
W większych projektach jest to bardzo ważne aby o to dbać.
W C++ istnieje niechlubna instrukcja goto: goto identyfikator; identyfikator : instrukcja Rzadko znajduje ona zastosowanie w ogólnym programowaniu wysokopoziomowym, lecz może być bardzo użyteczne, gdy program w C++ jest generowany przez inny program, a nie pisany bezpośrednio przez człowieka; np. instrukcje goto mogą być stosowane w parserze wygenerowanym z gramatyki przez generator parserów(wtrącenie ode mnie: jeżeli to ci nic nie mówi to to pomiń). Instrukcja goto może także być ważna w tych rzadkich przypadkach, kiedy osiągnięcie optymalnej efektywności staje się sprawą zasadniczą, np. w wewnętrznej pętli jakiegoś programu użytkowego czasu rzeczywistego. Jednym z kilku sensownych zastosowań goto w zwykłym kodzie jest umożliwianie wyjścia z zagnieżdżonej pętli lub instrukcji switch(break switch, która ją otacza). Na przykład
http://cpp0x.pl/forum/temat/?id=4213
Goto należy używać rozważnie i z głową
GT Team 04.11.2013
No kiedyś właśnie o tym też czytałem, ale bardzo rzadko go ogólnie używam. Tak teraz jakoś użyłem goto pzdr