2013-03-26 15 views
6

Rozważ prosty program. Musi pobrać sekwencje 5 numerów ze stdin i wydrukować ich sumy. Nie podano, ile linii wejściowych zostanie pobranych, ale program musi się zakończyć, jeśli znak nowej linii zostanie pobrany dwukrotnie (lub Enter zostanie naciśnięty dwukrotnie).C: Odczytaj ze standardowego wejścia, aż do dwukrotnego naciśnięcia Enter.

Na przykład

Wejście:

1 1 1 1 1 
2 2 2 2 2 
3 3 3 3 3/n 
/n 

wyjściowa:

5 
10 
15 




#include <stdio.h> 

int main() 
{ 
    int n1, n2, n3, n4, n5; 
    int sum; 
    while (/*condition*/) 
    { 
     scanf ("%d %d %d %d %d\n", &n1, &n2, &n3, &n4, &n5); 
     sum = n1 + n2 + n3 + n4 + n5; 
     printf ("%d\n", sum); 
    } 
    return 0; 
} 

Jedynym problemem jest to, że nie wiem, w jakim stanie musi być w pętli while. Odrobina pomocy zostanie doceniona.

Z góry dziękuję.

+3

Twój scanf jest nie tak powinno być 'scanf ("% d% d% d% d% d \ n", i N1 i N2 i N3 i N4 i N5)' – MOHAMED

+0

Czy liczby muszą znajdować się w osobnych liniach? – teppic

+0

@Mohamed KALLEL dziękuję, zredagowałem pytanie –

Odpowiedz

9

Zastosowanie getc(stdin) (man page) do odczytu pojedynczego znaku z stdin, jeśli nie jest to znak nowej linii można umieścić go z powrotem ungetc(ch, stdin) (man page) i użyj numeru scanf, aby odczytać swój numer.

int main() { 
    int sum = 0; 
    int newlines = 0; 
    int n = 0; 
    while(1) { 
     int ch = getc(stdin); 
     if(ch == EOF) break; 
     if(ch == '\n') { 
      newlines++; 
      if(newlines >= 2) break; 
      continue; 
     } 

     newlines = 0; 
     ungetc(ch, stdin); 
     int x; 
     if(scanf("%d", &x) == EOF) break; 
     sum += x; 
     n++; 
     if(n == 5) { 
      printf("Sum is %d\n", sum); 
      n = 0; 
      sum = 0; 
     } 
    } 
} 

demo online: http://ideone.com/y99Ns6

+2

+1 Proste rozwiązanie –

+0

tak, bardzo proste, dzięki –

+0

+1 dla get i unget – fayyazkl

1

Po prostu możesz ustawić wywołanie scanf w stanie i sprawdzić, czy udało się ustawić zmienne.

#include <stdio.h> 

int main() 
{ 
    int n1, n2, n3, n4. n5; 
    int sum; 
    while (scanf ("%d %d %d %d %d\n", n1, n2, n3, n4, n5) != EOF) 
    { 
     sum = n1 + n2 + n3 + n4 + n5; 
     printf ("%d\n", sum); 
    } 
    return 0; 
} 

(nie udało się przetestować ten kod ja)

+0

dzięki, mam inne pytanie: jeśli nie wiem, ile liczb wezmę, co powinienem zrobić? chodzi o to, że mój program musi przyjmować linie, które odpowiadają następującej właściwości: pierwsza liczba to kształt figury, 1 - okrąg, 2 - prostokąt, następnie współrzędne (współrzędna środka i promienia względem 4 współrzędnych rogów). mój program musi sumować wszystkie obszary, ignorując nakładanie się itp. Co powinienem zrobić w tej sytuacji? –

Powiązane problemy