2015-05-16 13 views
5

Sto imparando C da un libro e sto iniziando con le istruzioni del ciclo. Ma c'è un codice di esempio che non riuscivo a capire.utilizzo del valore di ritorno di scanf

Qualcuno può dirmi perché l'autore ha utilizzato status = scanf("%ld", &num);? Perché c'è uno = con scanf?

/* summing.c -- sums integers entered interactively */ 
#include <stdio.h> 
int main(void) 
{ 
    long num; 
    long sum = 0L; /* initialize sum to zero */ 
    int status;  
    printf("Please enter an integer to be summed "); 
    printf("(q to quit): "); 
    status = scanf("%ld", &num); 
    while (status == 1) /* == means "is equal to" */ 
    { 
     sum = sum + num; 
     printf("Please enter next integer (q to quit): "); 
     status = scanf("%ld", &num); 
    } 
    printf("Those integers sum to %ld.\n", sum); 
    return 0; 
} 

risposta

6

perché scanf() restituisce un valore che indica quanto bene la stringa corrispondente al formato passata, cioè quanti parametri sono stati successfuly riempito con dati.

Si potrebbe sapere che se si legge una specie di pagina manual o lo standard, se si incontra una funzione che non si conosce, leggere sempre quanto più possibile, in modo da poter capire come usalo

5

scanf restituisce il numero di elementi abbinati correttamente dal relativo elenco di identificatori. Quindi, se inserisci "q", scanf restituirà 0 (poiché "q" non è un numero intero) e il ciclo terminerà.

5

Si prega di dare un'occhiata al man page di scanf(). Restituisce il numero di articoli con successo scansionato. Quindi il valore di ritorno viene utilizzato per verificare il successo di scanf().

Nel codice,

status = scanf("%ld", &num); 
// code 
while (status == 1) 

il valore di ritorno di scanf() è memorizzato in status e controllati in seguito per verificare se scanf() ha scansionato con successo 1 voce o no.

  • Se è tornato 1, che significa un long int è stato inserito. Quindi il ciclo while() continuerà, chiedendo l'input successivo.
  • Uno si entra q, non corrisponderà l'identificatore coversion %ld, quindi scanf() fallirà, quindi tornerà 0. Quindi il ciclo while() terminerà.
Problemi correlati