Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c]ripetizione menù

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383

    [c]ripetizione menù

    Ciao, sto scrivendo un programma che simula un registro dei voti degli studenti.

    Il programma utilizza un menù. Sono riuscito ad aggiustare alcune parti in questa fase inziale di scrittura. Nonostante ciò accade che se seleziono la scelta 1, alla fine della raccolta dati viene ripetuto il menù due volte.
    Come posso risolvere il problema?

    Qui l'output:
    codice:
    		* REGISTRO DEI VOTI DEGLI STUDENTI *
    
    		1. Crea database studenti
    		2. Registra voti studenti
    		3. Visualizza risultati
    		4. Esci
    							Scelta:d
    
    		1. Crea database studenti
    		2. Registra voti studenti
    		3. Visualizza risultati
    		4. Esci
    							Scelta:1
    
    // Creazione database studenti
    
    numero di studenti(massimo 20): 3
    
    STUDENTE No.1
    Nome: Carlo
    Cognome: Frusani
    
    STUDENTE No.2
    Nome: Francesco
    Cognome: Rossi
    
    STUDENTE No.3
    Nome: Marcella
    Cognome: Pisarra
    		1. Crea database studenti
    		2. Registra voti studenti
    		3. Visualizza risultati
    		4. Esci
    							Scelta:
    		1. Crea database studenti
    		2. Registra voti studenti
    		3. Visualizza risultati
    		4. Esci
    							Scelta:
    e qui invece il codice del programma:
    codice:
    #include <stdio.h>
    
    #define MAXDIM 20
    
    
    main()
    {
     char c, nomi[MAXDIM][50],cognomi[MAXDIM][50];
     int n;
     printf("\n\t\t* REGISTRO DEI VOTI DEGLI STUDENTI *\n\n");
     do {
         printf("\t\t1. Crea database studenti\n\t\t2. Registra voti studenti\n\t\t3. Visualizza risultati\n\t\t4. Esci\n");
         printf("\t\t\t\t\t\t\tScelta:");
         while((c = getc(stdin)) != EOF && c != '\n' && c != '1' && c !='4');
         printf("\n");
         if (c=='1') {
             int i;
             printf("// Creazione database studenti\n\n");
             do {
                 printf("numero di studenti(massimo 20): ");
                 scanf("%d",&n);
             } while(i>=2 && i<MAXDIM+1);
             for(i=1;i<n+1;i++) {
                 printf("\nSTUDENTE No.%d\n",i);
                 printf("Nome: ");
                 scanf("%s",nomi[i]);
                 printf("Cognome: ");
                 scanf("%s",cognomi[i]);
             }
         }
     } while (c!='4');
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Dopo l'ultima scanf svuota il buffer con

    while(!getchar());

    e non dimenticare di inizializzare i con

    int i=0;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    beh, sembra risolto, alè!

    e non dimenticare di inizializzare i con int i=0;
    non ho avuto bisogno di inizializzarlo perché veniva già inizializzato nel ciclo for:
    codice:
    for(i=1;i<n+1;i++) {

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da cristianc
    non ho avuto bisogno di inizializzarlo perché veniva già inizializzato nel ciclo for:
    codice:
    for(i=1;i<n+1;i++) {
    Il ciclo for viene dopo la while in cui testi il contenuto di i ... e in quel momento non e' inizializzato ... segui il mio consiglio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    383
    Originariamente inviato da oregon
    Il ciclo for viene dopo la while in cui testi il contenuto di i ... e in quel momento non e' inizializzato ... segui il mio consiglio.
    ho come l'impressione di aver sbagliato VVoVe:
    la linea di codice esatta era questa:
    codice:
             } while(n>=2 && n<MAXDIM+1);

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da cristianc
    ho come l'impressione di aver sbagliato VVoVe:
    la linea di codice esatta era questa:
    codice:
             } while(n>=2 && n<MAXDIM+1);
    Ah ... ecco, ora va bene ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.