2013-03-27 89 views
-1

我的某个函数有问题。下面是代码:在if语句中使用for循环和数组时遇到问题

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

+1

小对象 - 在这个代码怎么回事。 – 2013-03-27 02:44:07

+0

条件本身似乎没问题,但你确实需要检查指标。还有一点是,你不需要在if语句中获得新的输入,递减'j'应该足够了。 – Motasim 2013-03-27 02:58:28

+0

'我'不是初始化顺便说一句。 [这段代码导致了我的无限循环](http://liveworkspace.org/code/2gWpzh$20)。 – 2013-03-27 04:09:52

回答

0

问题是你与

Ĵ

迭代循环,下标检查条件使用j个标在

将工作

的scanf( “%F”,&数据[j]的)

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

应该工作。因为数据[i]是不是一个可能的下标值,由于i是阵列尺寸

和为什么你使用的线

data[i]=data[i]; 

+0

我,j是个问题。但它将数据输入到数据[i]中,并在if语句中比较数据[i]。所以你的回答并不是真正的问题。 – TieDad 2013-03-27 02:39:06

+0

问题是数据[I]不存在,因为有从0仅标为i-1中,由于i是阵列的尺寸 – 2013-03-27 02:41:34

+0

@EvanLi:'数据[I]'是不是一个有效的内存位置,因为它是在数组边界之外。 – Jack 2013-03-27 02:42:36

-1

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

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

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

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--; 
      } 
    } 
} 

这一个正常工作

+0

你甚至还能达到这个功能吗? [这段代码导致我的死循环](http://liveworkspace.org/code/2gWpzh%2420)。 – 2013-03-27 04:35:12

+0

@AnishRam:你犯了同样的错误。在呼叫声明中使用&data [i]而不是'data' – 2013-03-27 09:47:48

+0

请删除此答案并将其与您的上一个答案结合使用。 – 2013-03-27 13:45:27