Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用带有for循环和数组的if语句时遇到问题_C_Arrays_For Loop - Fatal编程技术网

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

C 使用带有for循环和数组的if语句时遇到问题,c,arrays,for-loop,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);

我的一项职能出现问题。代码如下:

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];
}
包括
包括
包括
int输入量(int i);
无效输入FAHRS(双数据[],整数j);
双华氏度(双数据[],整数j);
无效输出FAHRS(双数据[],整数);
无效输出平均值(双数据[],整数numFahrs);
void outputHighLows(双数据[],整数);
无效输出梯度(双数据[],整数numFahrs);
内部主(空)
{
int i,j,numFahrs;
双数据[i],*ptr=&data[i];
i=输入量(i);
printf(“%d\n\n”,i);
输入法(和数据[i],i);
数据[j]=华氏度(&data[i],j);
printf(“%.1f”,数据[j]);
返回0;
}
int输入装载(int i)
{
printf(“请输入您要使用的VAUE数量。\n\n”);
scanf(“%d”、&i);
while(i25)
{
printf(“值超出范围。请输入另一个值。\n\n”);
scanf(“%d”、&i);
}       
返回i;
}   
无效输入FAHRS(双数据[],整数i)
{
int j;
printf(“请输入-175到175华氏度范围内的温度值。\n\n”);
对于(j=0;j175)
{
printf(“温度值超出范围,请重新输入”);
scanf(“%f”和数据[j]);
}
}       
}
双华氏度(双数据[],整数j)
{
int i;
printf(“测试”);

对于(j=1;j而言,问题在于您正在使用

j

并用下标检查条件

使用j作为下标将有效

scanf(“%f”和数据[j])

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

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

你为什么用这条线

data[i]=data[i];

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

   scanf("%f", &data[j]);
   ..
另外,为什么在for循环中比较
j
void inputFahrs(float data[],int i)
{
int j;
printf(“请输入-175到175之间的值”\n);

对于(j=0;ji,j是一个问题。但它将数据输入到数据[i],并在if语句中比较数据[i]。因此,您的答案没有触及真正的问题。问题是数据[i]不存在,因为只有从0到i-1的下标,因为i是array@EvanLi:
数据[i]
不是有效的内存位置,因为它位于数组的边界之外。但C不检查数组边界。如果这是单线程程序,则数据[i]虽然它溢出了有效的数组内存,但仍然可用。它无法存储,因为该内存位置不存在此代码中正在进行的小Obj-C。条件本身似乎没有问题,但您确实需要检查索引。另一点是,您不需要在if语句中获得新的输入,递减
j
should够了。
i
还没有初始化。你是怎么达到这个功能的?@AnishRam:你也犯了同样的错误。在call语句中使用了&data[i],而不是仅仅使用
data
请删除这个答案,并将它与你以前的答案结合起来。
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--;
            }
    }
}