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

    Problema lettura singoli caratteri e interi

    Il programma deve leggere una stringa di carattere compresi gli spazi e tre interi, il problema è che la funzione readNominativo() funziona solo al primo ciclo:


    codice:
    #include "fun.h"
    int main()
    {
    	studente anagrafe[DIM];
    	writeVet(anagrafe);
    }
    codice:
    #include "fun.h"
    
    void writeVet(studente *s)
    {
    	void readNominativo(char *);				//questa funzione sarà utilizzata solamente dalla funzione writeVet 
    	void readData(data *);
    	puts("Immettere i dati dello studente");
    	int i;
    	for(i=0;i<DIM;i++)
    	{
    		//printf("Nome e cognome:");
    		readNominativo(s[i].nomecognome);
    		readData(&s[i].date);
    	}
    }
    void readNominativo(char *n)
    {
    	puts("Inserire nome e cognome");
    	int i=0;
    	do{
    		n[i]=getchar();
    		i++;
    	}while(i<LUNG-1 && n[i-1]!='\n');
    	n[i-1]='\0';
    }
    void readData(data *d)
    {
    	puts("Inserire anno,mese e giorno");
    	scanf("%d%d%d",&d->anno,&d->mese,&d->giorno);
    }
    codice:
    #include <stdio.h>
    #include <string.h>
    
    #define LUNG 24	//LUNGHEZZA NOME E COGNOME 
    #define DIM 5		//NUMERO STUDENTI 
    
    typedef struct {
    	int anno;
    	int mese;
    	int giorno;
    }data;
    
    typedef struct{
    	char nomecognome[LUNG]; 	
    	data date;
    	char sesso; 			// m o f
    }studente;
    
    /*PROTOTIPI*/
    void writeVet(studente *);

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    ... e poi che succede?

    E' possibile che non spieghi nulla del problema e costringi gli altri a considerare/compilare/provare tutto il codice?

    Troppo facile così ...

    Dai una tua spiegazione, dicci cosa succede, cosa hai provato a fare ...

    E poi non sei più nuovo per non sapere che ci vuole il linguaggio nel titolo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da oregon
    ... e poi che succede?

    E' possibile che non spieghi nulla del problema e costringi gli altri a considerare/compilare/provare tutto il codice?

    Troppo facile così ...

    Dai una tua spiegazione, dicci cosa succede, cosa hai provato a fare ...

    E poi non sei più nuovo per non sapere che ci vuole il linguaggio nel titolo ...
    In questo caso credo che sia molto più semplice compilare per avere più chiaro il problema, comunque:
    Una volta chiamata la funzione readNominativo() questa, nei cicli successivi crea solamente una stringa vuota e non permette di inserire caratteri da tastiera. Ho provato a non chiamare la funzione readData e il problema è "risolto" perchè infatti riesco a creare DIM stringhe senza problemi.
    Perciò credo che il problema sia dovuto alla scanf inserita nella funzione readData

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Comincia ad inserire una linea

    while(getchar()!='\n');

    dopo la scanf per svuotare il buffer
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da oregon
    Comincia ad inserire una linea

    while(getchar()!='\n');

    dopo la scanf per svuotare il buffer
    Grazie ! Ora funzione, scusami, ma fflush(stdin) non dovrebbe fare la stessa cosa ?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Ghemon-a
    Grazie ! Ora funzione, scusami, ma fflush(stdin) non dovrebbe fare la stessa cosa ?
    Sì, ma solo per Microsoft ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da oregon
    Sì, ma solo per Microsoft ...
    wow, l'unico modo per fare ciò che fa la funzione fflush è while(getchar!='\n') ?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Ghemon-a
    wow, l'unico modo per fare ciò che fa la funzione fflush è while(getchar!='\n') ?
    L'unico modo?

    E' quello che serve ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da oregon
    L'unico modo?

    E' quello che serve ...
    Capito, 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 © 2024 vBulletin Solutions, Inc. All rights reserved.