考虑一个简单的程序.它必须从stdin中获取5个数字的序列并打印它们的总和.未说明将采用多少行输入,但如果换行符被取两次(或按两次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; }
唯一的问题是我不知道while循环中必须有什么条件.一点点的帮助将不胜感激.
提前致谢.
解决方法
使用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; } } }