Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] lettura ignorata

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156

    [C] lettura ignorata

    Salve, vi posto questa parte di codice.
    codice:
    int lettura(char v[10][20], char *sep, char st[])
    {
        FILE* f;
        int dim,z,k,i;
        char nome[10];
        printf("Inserire il nome del file da cui prendere le parole\n");
        scanf("%s", nome);
        f=fopen(nome, "r");
        if(f==NULL)
        {
            dim=-1;
        }
        else
        {
            printf("Inserire qual'e' il separatore\n");
            scanf("%c", sep);
            fscanf(f,"%s", st);
    La situazione è questa: prendo in un file una stringa formata da un certo numero di parole divise da un certo separatore e su di esse faccio delle operazioni.Il problema è che viene completamente ignorata l'istruzione:
    codice:
    scanf("%c", sep);
    Viene stampata a video solo la richiesta di inserire il separatore...non riesco a trovare l'errore

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema è dovuto al fatto che il buffer di tastiera contiene l'invio della scanf precedente. Devi ripulire il buffer e quindi prima della scanf("%c", &sep) scrivi

    while(getchar()!='\n') ;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Rimaneva nel buffer il carattere invio del precedente scanf ! quando incontrava il nuovo
    scanf terminava subito , e non leggeva il carattere di controllo . succede sempre
    quando si vuole leggere un carattere %c con scanf
    Dopo aver letto il carattere separatore ricordati di usarlo in seguito con l'asterisco
    codice:
    int lettura(char v[10][20], char *sep, char st[])
    {
        FILE* f;
        int dim,z,k,i;
        char nome[10];
        printf("Inserire il nome del file da cui prendere le parole\n");
        scanf("%s", nome);
        f=fopen(nome, "r");
        if(f==NULL)
        {
            dim=-1;
        }
        else
        {
            printf("Inserire qual'e' il separatore\n");
            fflush(stdin);// PULISCE stdin dal carettere invio del precedente scanf
            scanf("%c", sep);
            printf("valore di sep %c\n",*sep);// dopo usa *sep e non sep :)
            fscanf(f,"%s", st);
        }
    }
    Ciao oregon, non avevo visto la tua risposta
    Tecnologia

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Grazie ad entrambi Ultima domanda: i metodi che mi avete suggerito voi sono completamente equivalenti dal punto di vista pratico tra di loro giusto? ( così come scrivere scanf(" %c", dim) in modo tale che mi ignora gli spazi/newline?)

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... non lo sono del tutto.

    La fflush per lo stdin non è standard e funziona solo con Visual C++ e Windows.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    156
    Ok grazie mille

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.