PDA

Visualizza la versione completa : [C] Gestire correttamente il carattere "spazio" ricevuto in input


sil
05-12-2007, 18:36
Ciao a tutti,
ecco il mio problemino:
...
typedef struct
{
char titolo[MAX_LENGHT];
char autore[MAX_LENGHT];
float prezzo;
float sconto;
}libro;
....
for (i=0; i<NUM_LIBRI; i++)
{
printf ("Titolo libro:\n");
scanf ("%s", &libreria[i].titolo); //*perchè quando inserisco il titolo se c'è lo spazio poi non funziona piu il mio bel programmino?*//

......
}

}

:ciauz:

oregon
05-12-2007, 18:44
Al posto della scanf scrivi

fgets (libreria[i].titolo, MAX_LENGHT, stdin);

sil
05-12-2007, 18:49
Originariamente inviato da oregon
Al posto della scanf scrivi

fgets (libreria[i].titolo, MAX_LENGHT, stdin);

ok.

Mi spiegheresti esattamente che cos'è questo "fgets" e come funzione?
Cosi' mi rimane piu' impresso nella mente...per una prox volta.

oregon
05-12-2007, 18:57
E' una funzione di libreria per l'input delle stringhe. Puo' lavorare con i file e con la tastiera (standard input, stdin), accetta anche gli spazi e controlla il numero massimo di caratteri inseriti. Leggi la pagina

http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html

P.S. Per imparare a programmare, bisogna *anche* studiare dai libri ... se ne hai uno, anche di base, del linguaggio C, leggi quello che dice della fgets

sil
05-12-2007, 18:59
Grazie, molto gentile
:)

sil
06-12-2007, 14:24
#include <stdio.h>
#define MAX_LENGHT 255
#define MAX 300
typedef struct
{
int codice;
char nome[MAX_LENGHT];
}medicinale;

void main (void)
{
int i, N;
medicinale farmacia[MAX];

do
{
printf ("Quanti medicinali vuoi inserire\?\n");
scanf ("%d", &N);
}
while (N>MAX);


for (i=0; i<N; i++)
{
printf ("Codice:\n");
scanf ("%d", &farmacia[i].codice);

printf ("Nome:\n");
fgets (farmacia[i].nome, MAX_LENGHT, stdin);
}
}

Ed ora perché dopo che ho inserito il “codice” non funziona più niente e invece se uso scanf invece di fgets funziona? Cosa sto sbagliando nel’utilizzare fgets?

oregon
06-12-2007, 15:57
printf ("Codice:\n");
scanf ("%d", &farmacia[i].codice);

while(!getchar());

printf ("Nome:\n");
fgets (farmacia[i].nome, MAX_LENGHT, stdin);

Loading