使用带有for循环和数组的if语句时遇到问题

时间:2013-03-27 02:31:51

标签: c arrays for-loop

我在其中一个职能部门遇到了问题。这是代码:

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

3 个答案:

答案 0 :(得分:0)

问题是你用

迭代循环
  

Ĵ

并用下标

检查条件
  

使用j作为下标将起作用

  

scanf(“%f”,&amp; data [j])

     

if(data [j]&lt; -175] | | data [j]&gt; 175)

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

为什么你使用了这行

data[i]=data[i];

答案 1 :(得分: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--;
            }
    }
}

这个工作正常

答案 2 :(得分:-1)

我想这是因为你使用i索引扫描和存储数据,这是传递给函数的数组的大小,而不是当前元素的索引,它存储在{{ 1}}。它应该是:

j

另外,为什么要比较你的for循环 scanf("%f", &data[j]); .. j <= i - 1听起来更简单。