0

averageInt を適切に機能させようとしています。今のところ、入力すると:10(リターンキー)20(リターンキー)30(リターンキー)40(リターンキー)50(リターンキー)L平均出力:10

答えは 30 になるはずです。10 を返す方法がわかりません。

#include <stdio.h>
#include <math.h>

int main ()
{
//variable declarations
int minInt = 10, maxInt = 0, averageInt=0, numDivBy7 = 0, numGreat15 = 0;
int userInt = 0, sumOfInt = 0, count = 0;

//prompting user for values
printf("Enter integers (enter a character to terminate): ");



//while loop
while (scanf(" %d",&userInt) == 1 )
{
    count++;
    if (userInt<minInt)
        minInt=userInt;
    if (userInt>maxInt)
        maxInt=userInt;
    sumOfInt =+ userInt;
    averageInt = (double)sumOfInt/count;
    if (userInt%7 == 0)
        numDivBy7++;
    if (userInt > 15)
        numGreat15++;
    printf("Enter another integer (enter a character to terminate): ");
}

if (maxInt == 0 && minInt == 10)
    printf("The user entered no integers\n");
else
{
printf("Min: %.2d\tMax: %.2d\tAverage: %.2d",minInt,maxInt,averageInt);
printf("\nDivisable by 7: %.2d\tGreater than 15: %.2d\n",numDivBy7,numGreat15);
}

//terminate
return 0;
}
4

3 に答える 3

2

すべてのループに が必要userIntなため、 をループに入れる必要がscanfありwhileます。AnduserInt != charは有効な条件付きテストではありません。

scanf、正常に一致して割り当てられた入力項目の数を返します。この場合、ユーザー入力が数字の場合、1 が返されます。これをwhileループのテストとして使用できます。

...

userInt = 0;
maxInt = 0;
minInt = (1<<31)-1; //a integer large enough

while( scanf(" %d",&userInt) == 1 )
{
...
}

...
于 2012-10-03T02:27:08.947 に答える
1

この時点でのコードの設定方法では、一連の文字ではなく、整数を数値として読み取ります。あなたの質問について私が理解できることから、これはあなたが望むものではありません。

使いたいのは scanf("%c", &charpointer) です。これは一度に 1 文字を読み取り、ストリームが終了するとヌル ('\0') を読み取ります。

あなたの質問の他の部分は、特定の文字が数字であるかどうかを判断することに関係しています。覚えておくべき重要なことは、数字は文字であり、文字は数字であるため、式 'a' < 'c' は完全に有効で真であるということです。したがって、ブール式 (c>='0'||c<='9') に適合する任意の文字は、指定された文字 c が数字である場合に true として評価されます。

于 2012-10-03T02:20:52.917 に答える
1

最初にuserIntを宣言してみてください。次に、プログラムが整数であることが検出された場合、プログラムは次のように続行されます。

// ユーザーに値を要求する

char = userInt;

printf("Enter integers (終了する文字を入力してください): ");

scanf(" %c",&userInt);

if(userInt>=0){

プログラムを実行し続ける

}else{終了}

于 2012-10-03T02:25:07.603 に答える