PDA

View Full Version : C char e stringhe


NeoNum6
13-01-2006, 20:10
typedef struct{
char tipo;
int ora[2];/*hh:mm*/
int data[3];/*gg/mm/aaaa*/
}id;{

dopo un
id a;

dov'è l'errore se:
printf("inserisci tipo\n");
scanf("%c", &a.tipo);


in esecuzione mi salta proprio la scanf... :rolleyes:

andbin
13-01-2006, 20:31
in esecuzione mi salta proprio la scanf... :rolleyes:
Non è sbagliato ... quindi deve funzionare!

AbuJaffa
13-01-2006, 20:38
typedef struct{
char tipo;
int ora[2];/*hh:mm*/
int data[3];/*gg/mm/aaaa*/
}id;{

dopo un
id a;

dov'è l'errore se:
printf("inserisci tipo\n");
scanf("%c", &a.tipo);


in esecuzione mi salta proprio la scanf... :rolleyes:

Infatti. Il codice è esatto. ;)

NeoNum6
13-01-2006, 20:38
..forse avrò sbagliato altro...

wisher
13-01-2006, 21:57
prova a fare fflush(stdin) prima della scanf in modo da svuotare il buffer della tastiera

NeoNum6
13-01-2006, 22:22
più in generale il problema è che devo scrivere(e poi leggere)su un file .dat un char...se implemento il tutto con una stringa di due caratteri tutto ok ma se provo a "risparmiare" un pò nulla di fatto!

altra domanda...
dopo aver fatto la scanf("%s",a.tipo) nel caso della stringa di due caratteri come faccio la strcmp per verificare ad esempio, se quel carattere == a 't' ??

strcmp(a.tipo,'T')
oppure strcmp(a.tipo,"T\0")
o cos'altro???

wisher
13-01-2006, 22:29
per i char basta un semplice uguaglianza:

variabile == 't'

wisher
13-01-2006, 22:30
usa i singoli char, le stringhe vogliono i terminatori, è questo il tuo problema!

NeoNum6
13-01-2006, 22:49
è vero che le stringhe vogliono i terminatori...ma la scanf il terminatore lo aggiunge da sola!

wisher
13-01-2006, 22:54
se ha a disposizione 1 solo byte nn può metterlo.
il terminatore occupa anche lui il suo byte come ogni altro char

wisher
13-01-2006, 22:56
scusa, avevo ancora in mente il tuo problema originario.
per il confornto fai

string[0]=='t'

cmq secondo me anche con i char dovrebbe andare. prova a sostituire la scanf con la getch

NeoNum6
13-01-2006, 23:07
credo anch'io che dovrebbe andare...ma non và! in ogni caso credo che la soluzione migliore è il char...riguardo ancora casomai ho sbagliato altro

NeoNum6
14-01-2006, 16:54
a.tipo=getchar();
scanf("%c", &a.tipo);

sto impazzendo...solo con una scanf e una getchar di fila non mi salta :doh:

wisher
15-01-2006, 18:31
il problema sembra essere quello del buffer non vuoto:
prova fflush(stdin)

NeoNum6
16-01-2006, 16:43
...non sei il solo ad avermi consigliato la fflush...mò la provo!

NeoNum6
16-01-2006, 16:47
...funziona!... :muro: che peccato però ho consegnato proprio stamattina!!vabbè fa niente...grazie wisher

wisher
16-01-2006, 16:54
...funziona!... :muro: che peccato però ho consegnato proprio stamattina!!vabbè fa niente...grazie wisher
io cmq te l'avevo detto già tre giorni fa :sofico:
il problema è dato dal fatto che spesso la scanf lascia nel buffer alcuni caratteri come l'invio e poi la chiamata successiva interpreta i char residui come la stringa effettivamente immessa.
con fflush si forza lo svuotamento e si può operare con un buffer pulito