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循环中比较jvoid 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--;
}
}
}