2013-03-26 2 views
6

Considerare un programma semplice. Deve prendere sequenze di 5 numeri da stdin e stampare le loro somme. Non è indicato quante linee di input saranno prese, ma il programma deve terminare se il carattere di nuova riga viene preso due volte (o Invio viene premuto due volte).C: lettura da stdin fino a quando viene premuto Invio due volte

Per esempio,

ingresso:

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

uscita:

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; 
} 

L'unico problema è che non so quali condizioni devono essere in un ciclo while. Un po 'di aiuto sarà apprezzato.

Grazie in anticipo.

+3

tua scanf è sbagliato dovrebbe essere 'scanf ("% d% d% d% d% d \ n", e n1, e n2, e n3, e n4, e n5)' – MOHAMED

+0

I numeri devono essere su linee separate? – teppic

+0

@MohamedKALLEL grazie, ho editato la domanda –

risposta

9

Usa getc(stdin) (man page) per leggere un singolo carattere da stdin, se non è una nuova linea si può mettere indietro con ungetc(ch, stdin) (man page) e usa scanf per leggere il tuo numero.

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 in linea: http://ideone.com/y99Ns6

+2

+1 Soluzione semplice –

+0

sì, molto semplice, grazie –

+0

+1 per ottenere e annullare – fayyazkl

1

Bene, si potrebbe semplicemente mettere la chiamata scanf nelle condizioni, e controllare se è riuscito a impostare le variabili.

#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; 
} 

(Impossibile verificare questo codice stesso)

+0

grazie, ho un'altra domanda: se non so quanti numeri prendo, cosa dovrei fare? il punto è che il mio programma deve prendere le linee che corrispondono alla seguente proprietà: il primo numero è la forma della figura, 1 - cerchio, 2 - rettangolo, quindi le coordinate vengono (coordinate del centro e del raggio rispetto alle 4 coordinate degli angoli). il mio programma deve sommare tutte le aree, ignorando la sovrapposizione, ecc. Cosa devo fare in questa situazione? –