PDA

Visualizza la versione completa : [C] Accettare solamente numeri interi


rubyno
11-04-2007, 15:14
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

UltraBeginner
11-04-2007, 15:36
Il signore servito:

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

:)

rubyno
11-04-2007, 15:41
gi letto, questa che non capisco

[=% [width][modifiers]type=]

me la spieghi meglio please?

UltraBeginner
11-04-2007, 15:47
ehm ci sarebbe scrittolo...

Format specifiers: A sequence formed by an initial percentage sign (%) indicates a format specifier, which is used to specify the type and format of the data to be retrieved from stdin and stored in the locations pointed by the additional arguments. A format specifier follows this prototype:

[=% [width][modifiers]type=]

ti dice che il simbolo % indica uno specificatore di formato, che usato per specificare il tipo e il formato dei dati da prelevare dallo stdin

qui sotto puoi trovare la spiegazione di tutti gli specificatori

where:

* : An optional starting asterisk indicates that the data is to be retrieved from stdin but ignored, i.e. it is not stored in the corresponding argument.

width: Specifies the maximum number of characters to be read in the current reading operation

modifiers: Specifies a size different from int (in the case of d, i and n), unsigned int (in the case of o, u and x) or float (in the case of e, f and g) for the data pointed by the corresponding additional argument:
h : short int (for d, i and n), or unsigned short int (for o, u and x)
l : long int (for d, i and n), or unsigned long int (for o, u and x), or double (for e, f and g)
L : long double (for e, f and g)

type: A character specifying the type of data to be read and how it is expected to be read.

rubyno
11-04-2007, 15:55
ok grazie dei numerosi copia incolla... torniamo al problema principale..nex sa aiutarmi? per il fatto degli interi?

oregon
11-04-2007, 15:58
"%20s"

ad esempio per una stringa di 20 caratteri ...

Se utilizzi la fgets (come nell'altro post che hai aperto) con un po' di codice, riesci a risolvere il problema ...

La scanf non ti aiuta ...

MItaly
11-04-2007, 16:40
Qualcosa del genere?
http://forum.html.it/forum/showthread.php?s=&threadid=1110371

rubyno
11-04-2007, 16:50
grazie1000

Loading