0

Java (他の言語の中でも) を学んだ後、C を学んでいますが、この単純な問題を処理する方法について多少混乱しています。1 行の形式で入力を受け取るプログラムを作成する必要があります。たとえば、5 2 75 43 68(s のみ) の場合、 s の数、それらの合計、正数と負数の数intを返す必要があります。int

問題は、入力の数が明らかに可変であることです。1 つまたは 7 つの int が存在する可能性がありますが、すべてが 1 行に表示されます。C を使用して可変数の入力を処理する方法がわかりません。誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

1

可変数の入力を処理するには、(Ctrl+D) を押すまでループして scanf する必要があります。次に例を示します。

int n,sum=0,count=0;
while(scanf("%d",&n)!=EOF)
{
sum=sum+n;
count++;
}
printf("sum=%d,count=%d",sum,count);

注: Ctrl+D を押すと、scanf は -1 を返すため、入力を取得するプロセスが終了します。

乾杯!

于 2013-01-28T01:09:17.307 に答える
0

文字列を入力し、スペースを検索し、その位置の各数値を変換して加算し、count と sum にします。このように、行を入力しているバッファに上限を設定するだけで済みます。配列を使用しないため、int の数を制限する必要も、動的割り当てをいじる必要もありません。

編集: Kerrek SB の形式ではfgetsstrchrとを結合しstrtolます。:P

于 2013-01-28T01:05:28.417 に答える
0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buffer[200];
int numbers[100];
int main() {

    char *ptr;
    int cnt = 0;

    fgets(&buffer[0], 200, stdin); // Get the string

    ptr = strtok(buffer, " "); // Split in every space
    do {
            printf("Number %d: %s\n", cnt, ptr);
            numbers[cnt] = strtol(ptr, NULL, 0); // Grab number
            cnt++;
    } while((ptr = strtok(NULL, " ")));

    printf("Total numbers: %d\n", cnt);

}   
于 2013-01-28T01:15:43.423 に答える