2013-03-26 11 views
6

Betrachten Sie ein einfaches Programm. Es muss Folgen von 5 Zahlen von stdin nehmen und ihre Summen ausdrucken. Es wird nicht angegeben, wie viele Zeilen eingegeben werden, aber das Programm muss beendet werden, wenn das Zeilenumleitungszeichen zweimal eingegeben wird (oder die Eingabetaste zweimal gedrückt wird).C: Lesen von stdin, bis Enter zweimal gedrückt wird

Zum Beispiel

Eingang:

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

Ausgang:

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

Das einzige Problem ist, ich weiß nicht, in welchem ​​Zustand sich in einer while-Schleife sein muss. Ein bisschen Hilfe wird geschätzt.

Vielen Dank im Voraus.

+3

Ihre Scanf falsch ist, sollte es 'Scanf sein ("% d% d% d% d% d \ n", & n1, & n2, & n3 & n4 & N5)' – MOHAMED

+0

Müssen die Nummern in getrennten Zeilen stehen? – teppic

+0

@MohamedKALLEL danke, ich habe die Frage bearbeitet –

Antwort

9

Verwenden getc(stdin) (man page) ein einzelnes Zeichen von stdin zu lesen, wenn es kein Newline ist, können Sie es mit ungetc(ch, stdin) (man page) zurückgestellt und verwenden Sie scanf, um Ihre Nummer zu lesen.

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

Online-Demo: http://ideone.com/y99Ns6

+2

+1 Einfache Lösung –

+0

ja, sehr einfach, danke –

+0

+1 für get und get – fayyazkl

1

Nun, Sie könnten einfach den Scanf-Aufruf in die Bedingung setzen, und überprüfen, ob es gelungen ist, Ihre Variablen zu setzen.

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

(konnte nicht testen diesen Code selbst)

+0

danke, ich habe eine andere Frage: wenn ich nicht weiß, wie viele Zahlen werde ich nehmen, was soll ich tun? Der Punkt ist mein Programm muss die Linien, die der folgenden Eigenschaft entsprechen: erste Zahl ist die Form der Figur, 1 - Kreis, 2 - Rechteck, dann Koordinaten kommen (Koordinate von Mittelpunkt und Radius gegenüber 4 Koordinaten der Ecken). Mein Programm muss alle Bereiche summieren, Überlappungen ignorieren usw. Was soll ich in dieser Situation tun? –