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

[C++] Kończenie pracy programu, a funkcja exit

Ostatnio zmodyfikowano 2013-07-29 18:16
Autor Wiadomość
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:

C/C++
#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
P-89012
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  :)
P-89014
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;
P-89018
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.

P-89020
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.
P-89021
« 1 »
  Strona 1 z 1