![](/img/trans.png)
[英]Read arbitrary number of characters from stdin until pressing enter in C
[英]C: Read from stdin until Enter is pressed twice
考虑一个简单的程序。 它必须从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)
( 手册页 )从stdin
读取单个字符,如果它不是换行符,则可以使用ungetc(ch, stdin)
( 手册页 )将其放回去,并使用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
好吧,您可以简单地将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;
}
(无法自己测试此代码)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.