C:从stdin读取,直到按两次Enter键

时间:2013-03-26 11:16:24

标签: c io stdin

考虑一个简单的程序。它必须从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循环中必须有什么条件。一点点的帮助将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:9)

使用getc(stdin)man page)来读取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; } } } 来读取您的号码。

{{1}}

在线演示:man page

答案 1 :(得分: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;
}

(无法自己测试此代码)