View Full Version : [C]mi accetta solo interi
gV RuBiNo
11-04-2007, 14:21
Dubbio amletico: anche il programma più stupido in C, tipo calcolare l'area di un rettangolo, va in overflow se dichiaro x di tipo int e poi quando scanf mi chiede il valore di x e gli batto un carattere.
Per es.
int x=0;
do {
printf ("Digitare il numero di elementi che compongono i 2 vettori: ");
scanf ("%d",&x);
}
while (x==0 || x>20 || x<0);
se digito "a", il programma mi va in overflow. Qualche idea?
Inoltre, c'è qualcuno che mi può spiegare chiaramente la sintassi di scanf? dove va inserita l'ampiezza nei caratteri? quelle sui manuali non sono chiare...vorrei solo la sintassi
se digito "a", il programma mi va in overflow. Qualche idea?È il solito annoso problema della scanf. La scanf si ferma al primo carattere che non corrisponde secondo il tipo di specificatore indicato nel formato ma, nota, lascia tale carattere (e quelli successivi) nel buffer di input. È chiaro che se con %d accetta solo digit e tu inserisci una lettera, essa resterà nel buffer di input ..... e continuerà così ...
Io in questi casi consiglio di usare l'accoppiata fgets/sscanf, la prima per prendere una riga intera, la seconda per estrarre i dati dalla stringa.
Inoltre, c'è qualcuno che mi può spiegare chiaramente la sintassi di scanf?Vedi <qui> (http://www.cplusplus.com/reference/clibrary/cstdio/scanf.html), ad esempio (ma ne trovi altri).
gV RuBiNo
11-04-2007, 14:58
grazie mille :) hai capito il mio problema..io mi ero già mosso verso quell'accoppiata ma non ho capito bene come si usa... nel senso devo creare due files? puoi farmi un esempio pratico?
grazie mille :) hai capito il mio problema..io mi ero già mosso verso quell'accoppiata ma non ho capito bene come si usa... nel senso devo creare due files? puoi farmi un esempio pratico?Ecco:
#include <stdio.h>
int main (void)
{
char buf[30];
int a, b;
if (fgets (buf, sizeof (buf), stdin) != NULL)
{
if (sscanf (buf, "%d %d", &a, &b) == 2)
printf ("a=%d b=%d\n", a, b);
else
printf ("Input errato\n");
}
return 0;
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.