Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Problema con campo char in struct

    Salve a tutti,
    quando compilo il seguente codice non viene riportato alcun errore ma al momento dell'esecuzione riesco solo ad inserire i dati relativi al nome e l'età, infatti il comando scanf per assegnare un valore alla variabile iniziale non viene eseguito, quindi vengono stampati solo i dati relativi al nome e l'età
    codice:
    #include <stdio.h>
    
    typedef struct persona
    {
    	char nome[10];
    	int eta;
    	char iniziale;
    }persona;
    
    void leggi(persona *p);
    void vis(persona *p);
    
    int main(void)
    {
    	persona ale;
    	leggi(&ale);
    	vis(&ale);
    }
    
    void leggi(persona *p)
    {
    	scanf("%s%i%c",p->nome,&p->eta,&p->iniziale);
    }
    void vis(persona *p)
    {
    	printf("%s %i %c",p->nome,p->eta,p->iniziale);
    }

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Per cosa sta il %i ? Non dovresti usare %d per prendere in input/ stampare gli interi?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da ramy89
    Per cosa sta il %i ? Non dovresti usare %d per prendere in input/ stampare gli interi?
    Anche %i si usa per gli interi

  4. #4
    Utente di HTML.it L'avatar di jappoz
    Registrato dal
    Dec 2007
    Messaggi
    114
    codice:
    void leggi(persona *p)
     { scanf("%s%i%c",p->nome,&p->eta,&p->iniziale);
     }
    scusa ma perchè in eta e iniziale metti il reference?
    "Un film è, o dovrebbe essere, più simile alla musica che non alla fiction. Dovrebbe essere una progressione di stati d'animo e sentimenti. Il tema, ciò che è dietro all'emozione, il significato: tutto viene dopo"
    Stanley Kubrick

  5. #5
    Utente di HTML.it L'avatar di Shika
    Registrato dal
    Jan 2010
    Messaggi
    27
    codice:
    scanf("%s%i",p->nome,&p->eta);
    fflush(stdin);
    scanf("%c",&p->iniziale);
    prova così

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Modificala così:
    codice:
    scanf("%s\n%i\n%c",p->nome,&p->eta,&p->iniziale);
    Perchè tu in input non prendi solo una stringa e due interi, ma anche i caratteri newline.
    Ti suggerisco di usare sempre fgets per l' input, ti faccio un esempio:
    codice:
    char buffer[100];
    int a;
    float b;
    double c;
    printf("Inserire un intero: ");
    fgets(buffer,100,stdin);
    a=atoi(buffer);
    printf("Inserire un float: ");
    b=(float)atof(buffer);
    printf("Inserire un double: ");
    c=atof(buffer);
    Atof e atoi convertono da stringa a intero solo se possibile, se te ad esempio insrisci caratteri invece che numeri non vengono conteggiati.
    http://www.cplusplus.com/reference/c.../cstdio/fgets/

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da jappoz
    codice:
    void leggi(persona *p)
     { scanf("%s%i%c",p->nome,&p->eta,&p->iniziale);
     }
    scusa ma perchè in eta e iniziale metti il reference?
    Eta è un int quindi uso &...per quanto riguarda la variabile iniziale ( char) non sono sicuro, ma se non sbaglio ci vuole il reference anche li.

    Shika, vorrei capire perchè non funziona in questo caso, non usare un altro tipo di istruzione

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Non funziona perchè ogni volta che prendi i caratteri in input con la scanf leggi anche i '\n' che digiti,ripeto:
    codice:
    scanf("%s\n%i\n%c",p->nome,&p->eta,&p->iniziale);

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da ramy89
    Non funziona perchè ogni volta che prendi i caratteri in input con la scanf leggi anche i '\n' che digiti,ripeto:
    codice:
    scanf("%s\n%i\n%c",p->nome,&p->eta,&p->iniziale);
    Grazie ! Mi riferivo proprio a questo ! Quindi acquisiva come carattere \n ?

  10. #10
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da Ghemon-a
    Grazie ! Mi riferivo proprio a questo ! Quindi acquisiva come carattere \n ?
    Si, in questo modo lo legge senza memorizzarlo, lo "salta" .

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.