2

標準入力から多数の要素を数えて抽出するにはどうすればよいですか?

たとえば、len() は Python では簡単に利用できますが、C では利用できませんか?

ユーザーが次のように入力すると、平均を計算しようとしています:1 3 5 7 8 10 11 -1

私は次のことを試しました:

while (user_input != -1)
{
    total   += user_input;
    scanf ("%d", &user_input);

    //cannot work               
    average = total /  ...
}       
printf("Average = %f\n", average);  
4

2 に答える 2

1

やろうとしていることを行うには、カウンターを維持する必要があります。そのちょうどint counter = 0;ループ内:counter++

int counter = 0;
while (user_input != -1)
{
    total   += user_input;
    counter ++;
    scanf ("%d", &user_input);
}       
average = total / counter;
printf("Average = %f\n", average);  

scanf()明らかに、少なくとも1が返されたかどうかを確認する必要があります

--- 編集 --- 次のプログラム (前のプログラムに対応する) は有効であり、必要に応じて動作します。どのように機能するかを理解していない人はscanf()、気にしないでください。

#include <stdio.h>

int main(int argc, char *argv[])
{
   int total = 0;
   float average = 0.0f;
   int userinput = 0;
   int counter = -1;
   while(userinput != -1){
      counter ++;
      if(scanf("%d",&userinput) == 1 && userinput != -1){
         total += userinput;
      }
   }
   average = ((float)total/(float)counter);
   printf("Average = %f", average);
   return 0;
}

入力:10 20 30 40 50 60 -1 出力:Average = 35

于 2013-01-20T12:01:25.797 に答える
0

変更された質問とコメントから、本当にやりたいことは、ユーザーからの入力行を読み取り、その入力行から数値を抽出することです。
答えは、 を使用してそれを行うことはできないということscanfです。 を使用fgetsして行を読み取るstdin必要があり、その読み取り行から数値を抽出する必要があります。
クイックサンプルプログラムは次 のとおりです。

#include<stdio.h>
int main()
{
    char line[1024], *beg, *end;
    long readvalue;
    while (fgets(line, sizeof(line), stdin)) 
    {
        beg = line;
        for (beg = line; ; beg = end) 
        {
            readvalue = strtol(beg, &end, 10);
            if (beg == end)
                break;
                printf("[%d]",readvalue);
        }
    }
    return 0;
}

入力:

1 3 5 7 8 10 11 -1

出力:

[1][3][5][7][8][10][11][-1]
于 2013-01-20T11:54:45.957 に答える