Funkcja zwracajaca wskaznik
Ostatnio zmodyfikowano 2014-03-21 13:28
dybek Temat założony przez niniejszego użytkownika |
Funkcja zwracajaca wskaznik » 2014-03-21 10:24:35 Witam, mam problem z funkcja a dokladnie ze zwracaniem wskaznika przez nia i odczytywaniem go w mainie. Gdy zwracam wskaznik to tylko pierwsza liczbe wypisuje poprawna a reszta jest losowa. #include <iostream>
using namespace std;
int * wydaj_reszte( int oplata, int banknot ) { int reszta = banknot - oplata; int wsk[ 20 ]; memset( wsk, 0, sizeof( int ) * 20 ); int i = 0; while( reszta != 0 ) { if( reszta >= 100 && reszta < 200 ) { wsk[ i ] = 100; reszta = reszta - 100; i++; } if( reszta >= 50 && reszta < 100 ) { wsk[ i ] = 50; reszta = reszta - 50; i++; } if( reszta >= 20 && reszta < 50 ) { wsk[ i ] = 20; reszta = reszta - 20; i++; } if( reszta >= 10 && reszta < 20 ) { wsk[ i ] = 10; reszta = reszta - 10; i++; } if( reszta >= 5 && reszta < 10 ) { wsk[ i ] = 5; reszta = reszta - 5; i++; } if( reszta >= 2 && reszta < 5 ) { wsk[ i ] = 2; reszta = reszta - 2; i++; } if( reszta >= 1 && reszta < 2 ) { wsk[ i ] = 1; reszta -= 1; i++; } } return wsk; } void main() { int i = 0, * wsk2; int banknot, oplata; miejsce: cout <<( "Ile placimy ? \n" ); cin >> oplata; if( oplata > 200 && oplata < 0 ) { cout <<( "Za duza oplata\n" ); goto miejsce; } miejsce2: cout <<( "jakim banknotem placimy ? \n" ); cin >> banknot; if( banknot < oplata || banknot > 200 ) { cout <<( "Banknot musi byc wiekszy od oplaty !\n" ); goto miejsce2; } wsk2 = wydaj_reszte( oplata, banknot ); while( wsk2[ i ] != 0 ) { cout << wsk2[ i ]; cout << " "; i++; } }
|
|
alixir |
» 2014-03-21 13:28:04 Jeśli chcesz to osiągnąć w ten sposób, twój program wymaga kilku zmian. 1. Zastąp linijki int wsk[ 20 ]; memset( wsk, 0, sizeof( int ) * 20 ); tą: int * wsk = new int[ 20 ]; 2. W każdym "if" wewnątrz funkcji po każdej inkrementacji "i++" dopisz continue; 3. Przed return wsk; dopisz wsk[ i ] = 0; 4. Aby zapobiec wyciekowi pamięci w programie głównym musisz zwolnić pamięć przydzieloną w funkcji. Tym samym rozwiązanie to jest dość niebezpieczne. Na końcu program dopisz: delete[] wsk2; |
|
« 1 » |