2009-05-14 11 views

risposta

-1
#include <stdio.h> 

main() { 

    int i = 0; 
    int k,j=10; 

    i=scanf("%d%d%d",&j,&k,&i); 
    printf("total values inputted %d\n",i); 
    printf("The input values %d %d\n",j,k); 

} 

da here

+6

Sembra molto sospetto, memorizza entrambi il risultato di scanf() in i e legge un valore in i allo stesso tempo. Non raccomandabile – unwind

1

La funzione di libreria standard scanf viene utilizzato per l'input formattato: % d int (la D è l'abbreviazione di decimale)

#include <stdio.h> 
int main(void) 
{ 
    int number; 
    printf("Enter a number from 1 to 1000: "); 

    scanf("%d",&number); 
    printf("Your number is %d\n",number); 
    return 0; 
} 
+0

Ho aggiunto una variabile numerica. –

+0

lol thanks – TStamper

5

scanf() è la risposta, ma si dovrebbe certamente controllare il valore restituito dal momento che molte, molte cose possono andare i numeri di analisi sbagliate da ingresso esterno ...

int num, nitems; 

nitems = scanf("%d", &num); 
if (nitems == EOF) { 
    /* Handle EOF/Failure */ 
} else if (nitems == 0) { 
    /* Handle no match */ 
} else { 
    printf("Got %d\n", num); 
} 
+0

Il mio numero va a volte negativo o casuale, perché è questo? Questo è se il mio numero intero è grande, ancora entro 32 caratteri ma ancora grande –

+0

Un numero intero è in genere lungo 2 byte. Il bit più a sinistra viene utilizzato per memorizzare il segno del numero (0 per positivo, 1 per negativo), quindi restano 15 bit per la memorizzazione del numero stesso. Per questo motivo, gli interi in C possono variare da -32768 (-2^15 o 111111111111111111) a 32768 (2^15 o 0111111111111111). Quando inserisci un numero più grande del valore più grande possibile, al bit più a sinistra viene assegnato un valore e l'intero non rappresenta più un valore che speravi. Se vuoi inserire interi più grandi usa 'long int' o anche 'long long int' perché può contenere numeri molto più grandi. – PoVa

1

parte (f)scanf, che è stata sufficientemente discussa dalle altre risposte , vi è anche atoi e strtol, per i casi in cui è già stato letto l'input in una stringa ma si desidera convertirlo in un int o long.

char *line; 
scanf("%s", line); 

int i = atoi(line); /* Array of chars TO Integer */ 

long l = strtol(line, NULL, 10); /* STRing (base 10) TO Long */ 
            /* base can be between 2 and 36 inclusive */ 

strtol è raccomandato in quanto consente di determinare se un numero è stato letto con successo o meno (al contrario di atoi, che non ha modo di segnalare qualsiasi errore e restituirà semplicemente 0 se dato spazzatura).

char *strs[] = {"not a number", "10 and stuff", "42"}; 
int i; 
for (i = 0; i < sizeof(strs)/sizeof(*strs); i++) { 
    char *end; 
    long l = strtol(strs[i], &end, 10); 
    if (end == line) 
     printf("wasn't a number\n"); 
    else if (end[0] != '\0') 
     printf("trailing characters after number %l: %s\n", l, end); 
    else 
     printf("happy, exact parse of %l\n", l); 
} 
Problemi correlati