【问题标题】:Having trouble using if statement with for loop and arrays将 if 语句与 for 循环和数组一起使用时遇到问题
【发布时间】:2013-03-27 02:31:50
【问题描述】:

我的一项职能有问题。这是代码:

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。

【问题讨论】:

  • 这段代码中的小Obj-C。
  • 条件本身似乎没问题,但您确实需要检查索引。还有一点是不需要在 if 语句中获取新的输入,递减j 就足够了。
  • i 未初始化顺便说一句。 This code results in an infinite loop for me.

标签: c arrays for-loop


【解决方案1】:

问题是你正在迭代循环

j

并用下标检查条件

我

使用 j 作为下标会起作用

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

如果(数据[j]175)

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

你为什么用这条线

data[i]=data[i];

?

【讨论】:

  • i,j 是个问题。但是它将数据输入到 data[i] 中,并在 if 语句中比较 data[i]。所以你的答案并没有解决真正的问题。
  • 问题是data[i]不存在,因为从0到i-1只有下标,因为i是数组的大小
  • @EvanLi:data[i] 不是有效的内存位置,因为它超出了数组的范围。
  • 但是 C 不检查数组边界。如果这是一个单线程程序,虽然 data[i] 溢出了有效的数组内存,但它仍然可用。
  • 它无法存储,因为该内存位置不存在
【解决方案2】:
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--;
            }
    }
}

这个很好用

【讨论】:

  • 你是怎么达到这个功能的? This code results in an infinite loop for me.
  • @AnishRam:你犯了同样的错误。在调用语句中使用 &data[i] 而不是 data
  • 请删除此答案并与您之前的答案合并。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 2017-07-19
    • 2021-02-02
    • 1970-01-01
    • 2019-12-27
    • 2013-02-06
    • 1970-01-01
    相关资源
    最近更新 更多