我在其中一个职能部门遇到了问题。这是代码:
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
。
答案 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
听起来更简单。