6

簡単なプログラムを考えてみましょう。stdinから5つの数値のシーケンスを取得し、それらの合計を出力する必要があります。入力が何行取られるかは明記されていませんが、改行文字が2回取られる(またはEnterが2回押される)場合、プログラムは終了する必要があります。

例えば、

入力:

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 )を使用して、から1文字を読み取ります。改行でない場合は、 (man pagestdin )で元に戻し、を使用して番号を読み取ることができます。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

于 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 に答える