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

    [C] errore in un programma, ma quale?

    Ho la seguente funzione che dovrebbe leggere una lista di cognomi lettera per lettera in una matrice di char (28 righe e 13 colonne) e successivamente stamparli:

    codice:
    int immissione_cognomi()
    {
        int Ncognomi,i,j;
    //chiede quanti cognomi vogliamo inserire
        printf("\nQuanti cognomi volete inserire?");
        scanf("%d", &Ncognomi);
    
    //legge i cognomi lettera per lettera    
        for(i=0; i< Ncognomi; i++)
        {
            printf("\nInserisci il cognome di posizione n: %d ",i);
            //cin.get(elenco_cognomi[i],'\n');
            for(j=0; j<13; j++)
            {
                    scanf("%c", &elenco_cognomi[i][j]);
                    if(elenco_cognomi[i][j] == '\n') break;
            }
        }
    //stampa l'elenco dei cognomi
        for(i=0; i< Ncognomi; i++)
        {
            printf("\n[%d]: ",i);
            for(j=0; j<13; j++)
            {
                    printf("%c",elenco_cognomi[i][j]);
            }
        }
        
    
    }
    Con "if(elenco_cognomi[i][j] == '\n') break;" voglio fare in modo che smetta di leggere un cognome (e quindi una riga della matrice) e passi al prossimo subito dopo che premiamo il tasto invio.

    Ora il problema è che non so perchè il primo valore, quello con posizione [0][0] me lo salta come se avessi premuto invio senza scrivere nulla e non so perchè!

    Sa sapete corregermelo

  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il problema dipende dal fatto che prima di acquisire il primo nome hai eseguito una scanf:

    scanf("%d", &Ncognomi);

    con cui acquisisci da input un numero: l'acquisizione di un numero non toglie dall'input il carattere di 'a capo' che inserisci premendo invio, quindi se la successiva scanf è fatta su una stringa o un carattere, poichè il buffer di input contiene ancora il carattere di a capo, la scanf acquisisce tale carattere e ritorna, cosi a te sembra che quella scanf non sia stata eseguita, mentre è stata eseguita e ha letto il carattere di a capo rimasto da prima.

    Per evitare questo problema inserisci l'istruzione:

    fflush(stdin);

    subito dopo ogni scanf su un numero o un carattere o immediatamente prima di eseguire una scanf.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

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