Visualizzazione risultati 1 fino 15 di 15

Discussione: strano errore c

  1. #1
    Guest

    Predefinito strano errore c

    ho creato un piccolo programma (piccolo e stupido ) in c da linux, ma c'è un errore:
    se provate a sbagliare due volte la stessa tabellina, e poi a digitare 1, e quindi rincominciare, non partira più dalla prima tabellina, ma da quella successiva a quella in cui siete arrivati.. ma non riesco a capire il perchè!

    ecco il codice:
    Codice:
    #include <stdio.h>
    #include <stdlib.h>
    main () {
    int numero, numero2, risultato, ok, azione;
    inizio:
    printf("Scrivi il risultato della tabellina\n");
    calcola:
    numero = rand() %10;
    numero2 = rand() %10;
    ok = numero*numero2;
    printf("%d x %d = ", numero,numero2);
    scanf("%d", &risultato);
    if (risultato == ok) {
    goto calcola;
    } else {
    printf("Errore! Riprova\n");
    printf("%d x %d = ", numero,numero2);
    scanf("%d", &risultato);
    if (risultato == ok) {
    goto calcola;
    } else {
    printf("Hai perso! Digita:\n0) Uscita\n1) Riprova\n");
    printf("Cosa scegli? ");
    scanf("%d", &azione);
    if (azione == 1) {
    printf("\n\n");
    goto inizio;
    } else {
    }
    }
    }
    }
    ciao!!
    giaco

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Sembra un programma assemby :P
    Mi svugge il perchè salti, ma è concettualmente fatto male!
    1) Evita di usare le etichette, usale solo per la gestione degli errori
    2) Devi inizializzare il seme random o ad ogni esecuzione la funzione random ti darà sempre gli stessi numeri!
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    Guest

    Predefinito

    no, non da gli stessi numeri, cambiano ogni volta che il risultato è corretto...
    perchè non dovrei usare le etichette? cosa uso come alternativa? gli switch-case?

    ciao!!
    giaco

  4. #4
    Ospite Guest

    Predefinito

    wrestlingforum:
    -in quel programma qualunque cosa tu faccia , ogni volta le variabili numero e numero2 vengono reinizializzate

    -usare i goto in un programma di alto livello è controproducente , crea confusione ed è quindi bandito dal mondo della programmazione (tranne che in assembler ovviamente)

    -binarysun intendeva che se non inizializzi il seme , ogni volta che avvi il programma verra generata sempre la stessa sequenza casuale (che non sarà quindi più casuale)

    -quell'else vuoto in fondo è inquietante

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da xDestroyer
    wrestlingforum:
    -in quel programma qualunque cosa tu faccia , ogni volta le variabili numero e numero2 vengono reinizializzate

    -usare i goto in un programma di alto livello è controproducente , crea confusione ed è quindi bandito dal mondo della programmazione (tranne che in assembler ovviamente)

    -binarysun intendeva che se non inizializzi il seme , ogni volta che avvi il programma verra generata sempre la stessa sequenza casuale (che non sarà quindi più casuale)

    -quell'else vuoto in fondo è inquietante
    azz...:
    - in che senso reindirizzate? :?????:
    - beh, potrei risolvere con gli switch.. no?
    - e come faccio?
    - gia, l'ho fatto apposta per spaventarvi
    ! dai skerzo è perchè cosi su linux, tanto si usa da shell, se fai 0 si chiude automaticamente..

    ciao!!

  6. #6
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Puoi farla con un ciclo until.
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  7. #7
    Guest

    Predefinito

    questa non l'ho capita.. :?????: a che cosa ti riferisci?

  8. #8
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Già, until non esiste in C :P
    Usa il ciclo while!
    Esce dal ciclo quando ha fatto 2 tentativi O ha dato la risposta esatta O vuole uscire
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  9. #9
    Ospite Guest

    Predefinito

    Citazione Originalmente inviato da wrestlingforum
    azz...:
    - in che senso reindirizzate? :?????:
    - beh, potrei risolvere con gli switch.. no?
    - e come faccio?
    - gia, l'ho fatto apposta per spaventarvi
    ! dai skerzo è perchè cosi su linux, tanto si usa da shell, se fai 0 si chiude automaticamente..

    ciao!!

    se fai 0 si chiude automaticamente? eh? intendi return 0? spiegati meglio

    gli switch si, ma passa prima per gli if

    no non reindirizzate, reinizializzate! nel caso premi 1 il programma non deve passare due nuovi valori alle due variabili

  10. #10
    Guest

    Predefinito

    no lo zero era a riguardo di:
    printf("Cosa scegli? ");
    scanf("%d", &azione);
    if (azione == 1) {
    printf("\n\n");
    goto inizio;
    } else {
    }
    questo!
    ora cercherò di trovare qualche esempio di while..
    grazie a tutti!

  11. #11
    Ospite Guest

    Predefinito

    continuo a non capire il perchè di quel blocco else{} vuoto

  12. #12
    Guest

    Predefinito

    perchè chiude automaticamente il programma! se vien premuto 1 va all'inizio, altrimenti niente

    ciao!

  13. #13
    Ospite Guest

    Predefinito

    ma guarda che l'else vuoto è inutile

    funzionerà uguale se lo levi

  14. #14
    Guest

    Predefinito

    ahhhhhhhh ok!
    thank's!

  15. #15
    Guest

    Predefinito

    che nostalgia mi sto ricordando il basic del commodore.

    comunque ti consiglio di riscrivere il programma dall'inizio, bandendo i goto

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •