2013-03-26 3 views
6

Рассмотрите простую программу. Он должен принимать последовательности из 5 чисел из stdin и печатать их суммы. Не указано, сколько строк ввода будет принято, но программа должна завершиться, если символ новой строки будет принят дважды (или дважды нажмите клавишу Enter).C: Читайте от stdin до тех пор, пока не будет нажата клавиша Enter

Например,

Вход:

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

Выход:

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

Единственная проблема, я не знаю, что условие должно быть в то время как петли. Немного о помощи будет оценено.

Заранее спасибо.

+3

ваш зсапЕ неправильно это должно быть 'зсапЕ ("% d% d% d% d% d \ п", и n1, и n2, и n3, и n4, и n5)' – MOHAMED

+0

Должны ли номера быть на отдельных строках? – teppic

+0

@MohamedKALLEL спасибо, я редактировал вопрос –

ответ

9

Использование getc(stdin) (man page) для чтения одного символа из stdin, если это не символ новой строки вы можете поместить его обратно с ungetc(ch, stdin) (man page) и используйте scanf, чтобы прочитать ваш номер.

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

Интернет демо: http://ideone.com/y99Ns6

+2

+1 Простое решение –

+0

да, очень просто, спасибо –

+0

+1 для получения и незагрузки – fayyazkl

1

Ну, вы можете просто поместить вызов scanf в условие и проверить, удалось ли ему установить ваши переменные.

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

(Не удалось проверить этот код сам)

+0

спасибо, у меня есть другой вопрос: если я не знаю, сколько чисел я возьму, что мне делать? точка моя программа должна брать линии, которые соответствуют следующему свойству: первый номер представляет собой фигуру, 1 - круг, 2 - прямоугольник, затем идут координаты (координата центра и радиуса по сравнению с 4 координатами углов). моя программа должна складывать все области, игнорируя дублирование и т. д., что я должен делать в этой ситуации? –

Смежные вопросы