[C++] Kończenie pracy programu, a funkcja exit
Ostatnio zmodyfikowano 2013-07-29 18:16
ciekawski Temat założony przez niniejszego użytkownika |
[C++] Kończenie pracy programu, a funkcja exit » 2013-07-29 17:49:24 Witam,
bawiłem się trochę zadaniem domowym z lekcji 19 i chciałem dodać kilka dodatkowych funkcji.
Dodałem funkcję która sprawdza poprawność wczytanych danych i w razie błędu kończy program. I właśnie... Użyłem do tego niejakiej funkcji exit, która co prawda spełnia zamierzony cel jednak wydaje mi się, że nie pasuje bardzo do tego kodu.
Co myślicie o takim rozwiązaniu? (wcześniej chciałem zakończyć program break'iem ale okazało się, że nie można go użyć w tym przypadku)
I jeszcze jedno tutaj http://cpp0x.pl/dokumentacja/standard-C/exit/362 wyczytałem, że funkcja ta zwraca kod globalny, który wpisaliśmy w nawias.
Czyli chodzi o to, że exit (0); odpowiada tak jakby return 0;?
Mój kod:
#include <iostream> #include <conio.h> #include <ctime> using namespace std;
void WylosujLiczby( int Tablica[], int Ilosc, int min, int max ) { srand( time( NULL ) ); for( int i = 0; i < Ilosc; i++ ) { Tablica[ i ] =( rand() %( max - min + 1 ) ) + min; } } void Wypisz( int Tablica[], int Ilosc ) { for( int i = 0; i < Ilosc; i++ ) { cout << Tablica[ i ] << endl; } }
int Sumuj( int Tablica[], int Ilosc ) { int Wynik = 0; for( int i = 0; i < Ilosc; i++ ) { Wynik += Tablica[ i ]; } return Wynik; } void Sprawdz() { if( cin.good() == 0 ) { cout << "nie to nie"; getch(); exit( 1 ); } } int main() { int x, y, z; cout << "PODAJ DANE DO PROGRAMU: " << endl; cout << "Podaj wielkosc tablicy: "; cin >> x; Sprawdz(); int * Liczby = new int[ x ]; cout << "Podaj min wylosowana liczbe: "; cin >> y; Sprawdz(); cout << "Podaj max wylosowana liczbe: "; cin >> z; Sprawdz(); WylosujLiczby( Liczby, x, y, z ); Wypisz( Liczby, x ); cout << "Wynik = " << Sumuj( Liczby, x ); delete[] Liczby; getch(); return 0; }
Z góry dzięki
Pozdrawiam |
|
abdi |
» 2013-07-29 17:56:59 może być, ale można to też rozwiązać tak: w mainie if(!Sprawdz()) return 1;
a Sprawdz() musisz odpowiednio przerobić :P Możesz to potraktować jak ćwiczenie :) |
|
ciekawski Temat założony przez niniejszego użytkownika |
» 2013-07-29 18:04:50 no tak, przemienię typ Sprawdz() na bool'a i ta metoda by działała. Minusem jest tylko to, że za każdym razem musiałbym pisać if... a chciałem do sprawdzania użyć tylko wywołania funkcji. PS. tak naprawdę to w Twoim przypadku nie opłacało by mi się w ogóle pisać funkcji Sprawdz(). Lepiej (krócej) było by napisać if( cin.true() == 0 ) return 1; |
|
abdi |
» 2013-07-29 18:13:44 Czyli jest dobrze tak jak jest. a propo wcześniejszego pytania exit(0) odpowiada return 0; gdy ten jest umieszczony w mainie.
|
|
Monika90 |
» 2013-07-29 18:16:32 a propo wcześniejszego pytania exit(0) odpowiada return 0; gdy ten jest umieszczony w mainie.
|
Nie do końca, bo exit(0); nie spowoduje wywołania destruktorów obiektów lokalnych, a return 0; tak. |
|
« 1 » |