DOMANDA richiamare il main?

marcococ

Nuovo Utente
29
1
salve ragazzi , domanda forse un pò ignorante/banale ma abbiate pazienza.......linguaggio c .......quello che chiedo è come poter richiamare il main in una funzione ....grazie!
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
Il main è una funzione che internamente è chiamato da un’altra, cioè _start(). In C++ chiamare la funzione main() causa un errore in compilazione mentre in C è possibile addirittura chiamarla ricorsivamente:
C:
int main()
{
    main();
}
Ma perché dovresti richiamare il main? È una pratica che va assolutamente evitata...
 

marcococ

Nuovo Utente
29
1
perchè nel main ho una sorta di menu pricipale.......in una delle funzioni successive che ho sviluppato devo mettere come opzione "torna al menù principale" ecco tutto ....grazie comunque!
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Per i menu testuali si utilizza solitamente un while o un do-while.
 
  • Mi piace
Reazioni: _Achille

marcococ

Nuovo Utente
29
1
è quello che ho fatto , ma il menu sta nel main , quindi se devo riproporre il menù in seguito devo richiamare il main......
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Non hai bisogno di richiamare il main se puoi ritornarci :ok: (ergo, usa in modo sensato le funzioni e i return)
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
è quello che ho fatto , ma il menu sta nel main , quindi se devo riproporre il menù in seguito devo richiamare il main......

No, non ti serve richiamarlo.
Mostra i qualche riga di codice, così è difficile dirti cosa cambiare. ;)
 

marcococ

Nuovo Utente
29
1
come dovrei usare i return per tornare al main? il codice ve lo risparmio, è molto lungo dato che sono 3 file linkati tra loro....
devo solo usare una funzione che se chiamata mi riporta al menù iniziale del main....
 
Ultima modifica:

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Il punto è questo, stai sbagliando qualcosa se hai quella necessità. Dal main o dalla funzione chiamata dal main avrai il menu, e da lì richiamerai altre funzioni. Quando la funzione torna sei ancora nel menu.

Mostra almeno la parte del menu, altrimenti è impossibile mostrarti cosa fare, usando un caso di esempio simile alla tua situazione. ;)
 

marcococ

Nuovo Utente
29
1
Codice:
#include <stdlib.h>
#include <stdio.h>
#include "gamelib.h"


int main(){

  int scegli;

do{

  printf("Inserisci l'operazione da effettuare \n");
  printf(" 1. Crea mappa.\n 2. Gioca. \n 3. termina gioco.\n");
  printf("Attenzione, prima di giocare devi creare la mappa! \n " );

  scanf("%d",&scegli);
  if (scegli<1||scegli>3) {
  printf("Hai inserito un valore non valido\n" );
  }
  switch(scegli){
      case 1:
      crea_mappa();

      break;


      case 2:
     

      gioca();

      break;

      case 3:
      termina_gioco();

      break;


    }
}while(scegli!=3);


}
questo è il main.....
Codice:
void crea_mappa(){


int opzione;


do {
printf("\t Premi '1' per CREARE LA SCACCHIERA \n" );
printf("\t \n" );
printf("\t Premi '2' per STAMPARE LA SCACCHIERA \n" );
printf("\t \n" );
printf("\t Premi '3' per TORNARE INDIETRO \n" );
scanf("%d", &opzione );


switch (opzione) {
case 1:
crea_scacchiera();
break;


case 2:
stampa_scacchiera();
break;


case 3:
termina_creazione();
break;


default:
printf("Opzione non valida..\n" );
break;
}
} while(opzione!=3);


}

void termina_creazione() {

//torna al menu del main...
}


qui c'è la funzione, dove sull'opzione termina_creazione devo ritornare al menu del main....
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,208
1,845
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Allora ti è sufficiente usare il return.
Se devi eseguire termina_creazione() e poi uscire devi mettere il return dopo alla chiamata alla funzione (il break quindi in quel case non serve).
 
  • Mi piace
Reazioni: marcococ

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!