-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循环内的打印语句,但在if语句之后工作正常,所以这肯定是有问题的。我还尝试了一个while循环来代替if.

4

3 回答 3

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 回答
0

问题是你正在迭代循环

j

并用下标检查条件

一世

使用 j 作为下标将起作用

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

如果(数据[j]<-175]||数据[j]>175)

应该管用。因为 data[i] 不是可能的下标值,因为 i 是数组大小

你为什么用这条线

data[i]=data[i];

?

于 2013-03-27T02:35:36.270 回答
-1

我猜这是因为您正在使用i索引扫描和存储数据,索引是传递给函数的数组的大小,而不是当前元素的索引,它存储在j. 它应该是:

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

另外,为什么要在 for 循环中进行比较j <= i - 1j < i听起来更简单。

于 2013-03-27T02:36:23.303 回答