Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ritornare indietro
Forum - C/C++ - Ritornare indietro

Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 10:08
Venerdì, 19/06/2009
salve a tutti sto imparando il c++ e sto facendo una piccola calcolatrice con le 4 operazioni semplici e vorrei sapere come posso fare a tornare indietro all'inzio cioè quando il programma a fatto la somma chiedo all'utente se vuoi continuare a fare le somme oppure tornare indietro per scegliere un'altro tipo di operazione, per continuare con lì'operazione sono riuscito ma adesso non so come posso ritornare all'inizio cioè al main iniziale. conme posso fare? Grazie mille :k:

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 10:28
Venerdì, 19/06/2009
Usando una while? E farsì che quando la condizione è falsa si intende per uscire dal programma...

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 10:59
Venerdì, 19/06/2009
Potresti farmi un'esempio?? Grazie mille :k:

PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 11:07
Venerdì, 19/06/2009
int flag = 0;

while(flag) è equivalente a (flag == 0)
{

...
<programma>
..
.


printf("Vuoi uscire? Si digitare 1, No digitare 0");
scanf(%d, &flag);
}

è banale ma per il momento potresti accontentarti di questo, per poi migliorarlo e renderlo più complesso in futuro :)

Ultima modifica effettuata da Lawliet il 19/06/2009 alle 11:08
PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 11:49
Venerdì, 19/06/2009
Grazie ho risolto però con un'altro modo cioè se la risposta è 1 cioè Si allora ritorna all'inzio.
con questo codice:
if(rix==1){
return main();
}else{
return 0;
}
e va grazie mille comunque ciao ciao :k:

PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 12:32
Venerdì, 19/06/2009
Quella che hai utilizzato non è una soluzione "ottima" perchè lo standard vieta chiamate ricorsive al main (e qui sbagliano i compilatori che lo fanno fare comunque) e anche perchè, visto che dal main non si esce mai, la memoria delle variabili locali continua ad allocarsi sullo stack (quindi se continui per un bel po' a fare operazioni si verifica uno stack overflow). La soluzione ottimale sarebbe quella di utilizzare while(come ha suggerito lawliet).

Ultima modifica effettuata da manvb.net il 19/06/2009 alle 12:36
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 17:36
Venerdì, 19/06/2009
Testo quotato

Postato originariamente da manvb.net:

Quella che hai utilizzato non è una soluzione "ottima" perchè lo standard vieta chiamate ricorsive al main (e qui sbagliano i compilatori che lo fanno fare comunque) e anche perchè, visto che dal main non si esce mai, la memoria delle variabili locali continua ad allocarsi sullo stack (quindi se continui per un bel po' a fare operazioni si verifica uno stack overflow). La soluzione ottimale sarebbe quella di utilizzare while(come ha suggerito lawliet).



Si, per esempio io farei cosi'

Codice sorgente - presumibilmente C++

  1. int main() {
  2. char c;
  3.  
  4. do {
  5.     [...] // stampa il menu' con l'opzione 0. Esci
  6.  
  7.     c = getch();
  8.  
  9.     switch (c) {
  10.       case '1': faisomma();
  11.       case '2': faisottrazione();
  12.       [...] // Tutte le altre operazioni che vuoi gestire
  13.     }
  14.  
  15.   } while (c != '0')
  16.  
  17. }



poi nelle funzioni faisomma(), faisottrazione(), ecc... metterai come ritorno indietro la condizione di uscita.

Tutto chiaro?

Ciao.

Luigi

Ultima modifica effettuata da gigisoft il 19/06/2009 alle 17:40
PM Quote
Avatar
Lawliet (Normal User)
Expert


Messaggi: 386
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 18:31
Venerdì, 19/06/2009
Testo quotato

Postato originariamente da LittleHacker:

Grazie ho risolto però con un'altro modo cioè se la risposta è 1 cioè Si allora ritorna all'inzio.
con questo codice:
if(rix==1){
return main();
}else{
return 0;
}
e va grazie mille comunque ciao ciao :k:



E madò addiritura return main...  questo secondo me va contro il principiodi buona programmazione strutturata, a sto punto usa il goto! :D :D

Scherzavo.. è preferibile usare ciò che dicono gli altri tuoi colleghi come Luigi che ti ha "migliorato" usato una do-while (la sai cos'è vero?).

PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 20:22
Venerdì, 19/06/2009
Si si so cos'è...ok allora provo con il metodo che mi avete consigliato...Grazie:k:

PM Quote