6

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

提前致谢。

4

2 回答 2

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

于 2013-03-26T11:28:56.713 回答
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;
}

(无法自己测试此代码)

于 2013-03-26T11:21:21.710 回答