Struct{}

di il
12 risposte

Struct{}

Salve a tutti ragazzi,

oggi mentre stavo svolgendo un esercizio con le struct mi è capitato questa "stranezza", perchè
nel terminale all' inserimento dei dati del secondo libro mi esce così :
Titolo: Autore: e qui aspetta che io inserisca qualcosa.
invece di
Titolo: pincopallino
Autore: pincopallino2
ecc ecc

Vi lascio di seguito il mio codice sorgente e anche lo screenshot del terminale in modo che possiate capire meglio anche voi.
Grazie a tutti in anticipo .

/* Descrivere la struttura libro con gli attributi: titolo, autore, editore,
anno di edizione, codice ISBN e prezzo. Realizzare una funzione che riceve
in ingresso il puntatore a una struttura di quel tipo, richiede al' utente
gli attributi di un libro e li memorizza nella struttura stessa. */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
struct SData{
    char titolo[MAX];
    char autore[MAX];
    char editore[MAX];
    int anno_edizione;
    int ISBN;
    float prezzo;
};
typedef struct SData Libro;

/* PROTOTIPI DI FUNZIONE */





/* PROGRAMMA CHIAMANTE */
int main()
{

Libro testoA;               //Prima variabile di tipo Libro
Libro testoB;		  //Seconda variabile di tipo Libro
Libro testoC;		  //Terza variabile di tipo LIbro
Libro testoD;		  //Quarta variabile di tipo LIbro

	
	printf("***INSERIMENTO ATTRIBUTI LIBRO***\n\n");
	

	printf("\t\tInserimento attributi 1° libro..\n\n");

    printf("Titolo: ");
    gets(testoA.titolo);

    printf("Autore: ");
    gets(testoA.autore);

    printf("Editore: ");
    gets(testoA.editore);
    
    printf("Anno di edizione: ");
    scanf("%d", &testoA.anno_edizione);

    printf("Codice ISBN: ");
    scanf("%d", &testoA.ISBN);

    printf("Prezzo (euro): ");
    scanf("%f",&testoA.prezzo);
   
    //////////////////////////////////////
    
    printf("\t\tInserimento attributi 2° libro..\n\n");

    printf("Titolo: ");
    gets(testoB.titolo);

    printf("Autore: ");
    gets(testoB.autore);

    printf("Editore: ");
    gets(testoB.editore);
    
    printf("Anno di edizione: ");
    scanf("%d", &testoB.anno_edizione);

    printf("Codice ISBN: ");
    scanf("%d", &testoB.ISBN);

    printf("Prezzo (euro): ");
    scanf("%f",&testoB.prezzo);
    
   /////////////////////////////////////////
   printf("\t\tInserimento attributi 3° libro..\n\n");

    printf("Titolo: ");
    gets(testoC.titolo);

    printf("Autore: ");
    gets(testoC.autore);

    printf("Editore: ");
    gets(testoC.editore);
    
    printf("Anno di edizione: ");
    scanf("%d", &testoC.anno_edizione);

    printf("Codice ISBN: ");
    scanf("%d", &testoC.ISBN);

    printf("Prezzo (euro): ");
    scanf("%f",&testoC.prezzo);
    
    //////////////////////////////////////////
    printf("\t\tInserimento attributi 4° libro..\n\n");

    printf("Titolo: ");
    gets(testoD.titolo);

    printf("Autore: ");
    gets(testoD.autore);

    printf("Editore: ");
    gets(testoD.editore);
    
    printf("Anno di edizione: ");
    scanf("%d", &testoD.anno_edizione);

    printf("Codice ISBN: ");
    scanf("%d", &testoD.ISBN);

    printf("Prezzo (euro): ");
    scanf("%f",&testoD.prezzo);

  return 0;
}


/* DEFINIZIONI FUNZIONI */


Allegati:
16176_11a1306a3afb6bbe399a055d3300ef5d.png
16176_11a1306a3afb6bbe399a055d3300ef5d.png

12 Risposte

  • Re: Struct{}

    Non utilizzare gets, Utilizza scanf.

    PS: Imposta come titolo del thread uno più significativo.
  • Re: Struct{}

    Scrivere urgente nel titolo è il modo migliore per non avere risposte
  • Re: Struct{}

    X Pliero: per cortesia modifica il titolo della discussione (edit sul primo post)
  • Re: Struct{}

    Titolo cambiato, comunque non risolvo l'errore mettendo la scanf al posto di gets() , anzi mi fa lo stesso "errore" anche con il primo libro.... perchè dite?
  • Re: Struct{}

    E' uno dei problemi più affrontati nei forum ... hai fatto una ricerca, anche in questo forum?
  • Re: Struct{}

    Wolt ha scritto:


    Non utilizzare gets, Utilizza scanf.

    PS: Imposta come titolo del thread uno più significativo.
    Praticamente usando scanf("%s", testoA.titolo);(esempio) se immetto una sola parola e non uso la barra spaziatrice funge alla perfezione, mentre se inserisco due parole Es: {"Linguaggio C"} mi salta uno degli elementi della Struct e passa al successivo... non mi era mai capitato prima...
  • Re: Struct{}

    oregon ha scritto:


    E' uno dei problemi più affrontati nei forum ... hai fatto una ricerca, anche in questo forum?
    Veramente?... Uhm provo a cercare meglio nel forum allora, comunque grazie
  • Re: Struct{}

    Indizio: http://en.cppreference.com/w/c/io/fflus
  • Re: Struct{}

    Altro indizio https://www.iprogrammatori.it/forum-programmazione/cplusplus/svuotare-buffer-stdin-t25466.html#p8543188
  • Re: Struct{}

    Problema risolto.
    Basta inserire fflush(stdin); dopo l'ultima scanf di ogni libro per svuotare il buffer e quindi procedere senza problemi.

    Grazie a tutti!
  • Re: Struct{}

    La fflush vale solo per un ambiente Microsoft. Leggi bene le altre soluzioni.
  • Re: Struct{}

    oregon ha scritto:


    La fflush vale solo per un ambiente Microsoft. Leggi bene le altre soluzioni.
    Grazie mille, si hai ragione, comunque sono "ragequittato" da Ubuntu e sono passato su Windows quando ho provato con fflush.
Devi accedere o registrarti per scrivere nel forum
12 risposte