-1

機能の 1 つで問題が発生しています。コードは次のとおりです。

include <stdio.h>
include <math.h>
include <stdlib.h>

int inputAmount(int i);

void inputFahrs(double data[ ], int j);

double fahrToCels (double data[ ], int j);

void  outputFahrs(double data [ ], int numFahrs);

void outputAverage(double data[ ], int numFahrs);

void outputHighLows(double data[ ], int numFahrs);

void outputGrads(double data[ ], int numFahrs);

int main (void)
{
    int i, j, numFahrs;
    double data[i], *ptr=&data[i];
    i=inputAmount(i);
    printf("%d\n\n", i);
    inputFahrs(&data[i], i);
    data[j]=fahrToCels(&data[i], j);
    printf("%.1f", data[j]); 
    return 0;
}

int inputAmount(int i)
{
    printf("Please enter the amount of vaues you would like to use.\n\n");
    scanf("%d", &i);
    while(i<1 || i>25)
    {
        printf("Value is out of range. Please enter another value.\n\n");
        scanf("%d", &i);
    }       
    return i;
}   

void inputFahrs(double data[ ], int i)
{
    int j;
    printf("Please enter temperature values in the range of -175 to 175 degrees F.\n\n");
    for(j=0;j<i;j++)
    {
        scanf("%f", &data[j]);
        if (data[j]< -175 || data[j]>175)
        {
            printf("Temperature value is out of range. Please re-enter");
            scanf("%f", &data[j]);
        }
    }       
}

double fahrToCels (double data[ ], int j)
{
    int i;
    printf("TEST");
    for(j=1;j<=i;j++)
    {
        data[i]=(((data[i])-32)*(5.0/9.0));
    }
    return data[i];
}

基本的に私のコードの問題は、ifステートメントを完全にスキップすることです。プログラムにループを通過させfor、ユーザーが範囲外の値を入力した場合にifステートメントを開始させたい。forループ内の print ステートメントですが、ifステートメントの後には正常に機能するため、間違いなく何か問題があります。whileの代わりにループも試しましたif

4

3 に答える 3

0

問題は、ループを繰り返していることです

j

添え字で条件をチェックする

j を添字として使用すると機能します

scanf("%f",&data[ j ])

if(data[ j ]< -175] | | data[ j ]>175)

動作するはずです。data[i] は可能な添字値ではないため、i は配列サイズであるため

そして、なぜあなたはそのラインを使ったのですか

data[i]=data[i];

?

于 2013-03-27T02:35:36.270 に答える
0
void inputFahrs(float data[],int i)
{
    int j;
    printf("Please Enter values in the range of -175 to 175\n");
    for(j=0;j<i;j++)
    {
            scanf("%f",&data[j]);
            if(data[j]<-175 || data[j]>175)
            {
                    printf("value is out of range. Enter correct value\n");
                    j--;
            }
    }
}

これはうまくいきます

于 2013-03-27T02:59:28.087 に答える
-1

iこれは、に格納されている現在の要素のインデックスではなく、関数に渡される配列のサイズであるインデックスを使用してデータをスキャンおよび格納しているためだと思いますj。そのはず:

   scanf("%f", &data[j]);
   ..

さらに、なぜ for ループで比較するのj <= i - 1ですか? j < iより簡単に聞こえます。

于 2013-03-27T02:36:23.303 に答える