2015-05-16 22 views
5

Uczę się C z książki i zaczynam od instrukcji pętli. Jest jednak przykładowy kod, którego nie mogłem zrozumieć.użycie zwracanej wartości scanf

Czy ktoś może mi powiedzieć, dlaczego autor użył status = scanf("%ld", &num);? Dlaczego jest = z 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; 
} 

Odpowiedz

6

ponieważ scanf() zwraca wartość wskazuje, jak dobrze dopasowane przekazany ciąg formatu, to znaczy ile parametry successfuly wypełnione danymi.

Powinieneś wiedzieć, że jeśli czytasz coś w rodzaju strony manual lub standardu, jeśli kiedykolwiek napotkasz jakąś nieznaną funkcję, zawsze czytaj o niej tak dużo, jak tylko możesz, abyś mógł zrozumieć, jak Użyj tego.

5

scanf zwraca liczbę pomyślnie dopasowanych elementów z listy jej specyfikatorów. Tak więc, jeśli wpiszesz "q", scanf zwróci 0 (ponieważ "q" nie jest liczbą całkowitą), a pętla zostanie zakończona.

5

Proszę spojrzeć na man page z scanf(). Zwraca liczbę zeskanowanych przedmiotów. Tak więc wartość zwracana jest używana do sprawdzania skuteczności scanf().

W kodzie

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

wartość zwracana scanf() jest przechowywany w status i sprawdzone później sprawdzić, czy scanf() pomyślnie zeskanowane 1 przedmiot czy nie.

  • Jeśli powrócił 1, co oznacza, że ​​wprowadzono long int. Następnie pętla while() będzie kontynuowana, prosząc o kolejne wejście.
  • Po wprowadzeniu q, nie będzie on zgodny ze specyfikatorem wygładzania %ld, dlatego scanf() zakończy się niepowodzeniem, dlatego zwróci 0. Następnie zakończy się pętla while().
Powiązane problemy