Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C] Programma per trovare un numero con le funzioni.

    Vorrei sottoporvi questo programma:

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>

    int in(){
    int ni;
    printf("Immetti un numero fra uno a cento:");
    scanf("%d", ni);
    }


    int main(void){
    int nc;
    int t = 0;
    srand(time(0));
    nc = rand () %100;
    in();
    while (nc != ni){
    t++;
    if (ni == nc){
    printf("Bravissimo hai indovinato in %d tentativi!", t);
    }
    else if (ni <= nc){
    printf("Il numero da indovinare è maggiore di %d", ni);
    in();
    }
    else if (ni >= nc){
    printf("Il numero da indovinare è minore di %d", ni);
    in();
    }
    }
    }

    Ora non riesco a terminarlo perchè mi dice che la variabile ni non esiste.
    Se però cerca di inzializzarla tra i valori della funzione main, va a finire che nella prima funzione mi dice di non poterla convalidare perchè mancala variabile ni.
    Come risolvere il problema? Ho provato anche a usarlosenza usare la funzione ma il risultato è sempre lo stesso.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se l'input lo fai in una funzione, la variabile deve essere visibile sia alla funzione sia al main.

    Quindi, o la rendi "globale" (dichiarandola fuori da main e fuori dalla funzione), oppure la dichiari nel main e ne passi il puntatore alla funzione in modo che quest'ultima ne possa modificare il valore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    ho seguito i consigli di oregon,ora iesce a compilarlo, ma si blocca quando inserisco il primo numero da valutare.

    P.S. modifichero il programma del primomessaggio ad ogni suggerimento, grazie!

  4. #4
    ci sono diverse cose che non vanno
    codice:
    int in ( ) {
            int ni;
            printf("Immetti un numero fra uno a cento : ");
            scanf("%d", &ni );
            return ni; 
    }
    
    
    int main (void) {
            
            int nc;
            int t = 0;
            srand(time(0));
            nc = rand () %100;
            int ni = in() ;
            printf("%d\n", ni);
    
            while (nc != ni) { 
                    t++;
                    if ( ni == nc ) {
                            printf("Bravissimo hai indovinato in %d tentativi!\n", t);
                    }
                    else if ( ni <= nc ) {
                            printf("Il numero da indovinare è maggiore di %d\n", ni);
                            ni =in() ;
                    } 
                    else if ( ni >= nc ) {
                            printf("Il numero da indovinare è minore di %d\n", ni);
                            ni =in() ;
                    }
            }
            
            return (0) ;
            
    }

  5. #5
    (tardissimo... )
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67

    :)

    codice:
    int in(int *p)
    {
            do {
              printf("Immetti un numero fra uno a cento : ");
            } while(scanf("%d", p) < 1); 
      return *p; /* ritorna il valore non l'indirizzo */
    }
    
    int main (void) {  
        int ni, nc, t = 0;
            
        srand(time(0));
        nc = rand () %100;
    
        while (nc != in(&ni)) { 
          t++;
          printf("%d\n", ni); 
          if (ni < nc ) /* <= significa minore o uguale a! */
            printf("Il numero da indovinare è maggiore di %d\n", ni); 
          else
            printf("Il numero da indovinare è minore di %d\n", ni);
        }
      printf("Bravissimo hai indovinato in %d tentativi!\n", t);
      return 0;
    }

  7. #7
    grazie, ho capito l'errore che commettevo, e anche a cosa serve "return".

    Purtroppo quando indovino il numero, esce direttamente dal programma, ho provato a mettere anche un system ("pause"); ma non succede niente.
    Qualcuno sa cosa posso mettere per fare vedere in quanti tentativi ho indovinato?

    P.S. ho provato anche con getchar();

  8. #8
    codice:
    int in ( ) {
            int ni;
            printf("Immetti un numero fra uno a cento : ");
            scanf("%d", &ni );
            return ni; 
    }
    
    
    int main (void) {
            
            int nc;
            int t = 0;
            srand(time(0));
            nc = rand () %100;
            int ni = in() ;
            printf("%d\n", ni);
    
            while (nc != ni) { 
                    t++;
                    if ( ni == nc ) {
    /*
    questo codice non viene mai eseguito poichè
    se nc == ni il programma esce dal ciclo
    while prima di aver raggiunto questo punto
    */
                             printf("Bravissimo hai indovinato in %d tentativi!\n", t);
                    }
                    else if ( ni <= nc ) {
                            printf("Il numero da indovinare è maggiore di %d\n", ni);
                            ni = in() ;
                    } 
                    else if ( ni >= nc ) {
                            printf("Il numero da indovinare è minore di %d\n", ni);
                            ni = in() ;
                    }
            }
    
    /*
    se sei arrivato qui vuol dire che hai indovinato
    quindi è il posto giusto per fare i complimenti
    */        
             printf("Bravissimo hai indovinato in %d tentativi!\n", t); 
            return (0) ;
            
    }

  9. #9
    Utente di HTML.it L'avatar di 810106
    Registrato dal
    Jun 2008
    Messaggi
    67

    perche...

    Perche devi mettere la system() prima del return.
    Un ritorno da maincausa la chiusura della finestra di dos!

  10. #10

    Re: perche...

    Originariamente inviato da 810106
    Perche devi mettere la system() prima del return.
    Un ritorno da maincausa la chiusura della finestra di dos!
    stai presumendo che utilizzi windows come sistema operativo e che, in questo caso, non stia eseguendo il programma da linea di comando.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.