【问题标题】:How to use a nested if else statements in a for loop in c如何在c的for循环中使用嵌套的if else语句
【发布时间】:2018-04-02 16:18:39
【问题描述】:

我的 for 语句有问题。我试图在里面有一个嵌套的 if else 语句,我正在使用指针。我已经尝试了所有方法,并且查看了整个互联网。我已将 cmets 放在有错误的行旁边,但如果您发现其他错误,请告诉我。谢谢你

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0

void getinput(double*xptr, int*nptr)
{
int flag;
    do
    {
      flag = TRUE;
      printf("What is the value of x and the number of terms:");
      scanf("%lf %i", xptr, nptr);
      if (*nptr <= 0)
      {
        printf("The number of terms must be positive\n");
        flag = FALSE;
      }
    }
    while(flag == FALSE);
}

double sinHyper(double *xptr, int *nptr) {
    int i;
    double sum;
    double ti;
    i = 0;
    ti = 0;
    for (i = 0; i < *nptr; i = i+1)// I'm getting a Warning: comparioson between pointer and integer
    {
        if (i == 0)
        {
            sum = xptr;
        } else {
            ti = 2*i+1;
            ti = ti*2*i;
            ti = (xptr*xptr)/ti;// I'm getting a error: invalid operands to binary * (have 'double*' and 'double*')
            sum = ti*sum;
        }
    }
    return (sum);
}

void main() {
   int n;
   double x;
   double sinhx;
   getinput(&x, &n);
   sinhx = sinHyper(&x, &n);
   printf("For an x of %.0f with %i terms the sinh(x) is %f", x, n, sinhx);
    return 0;
}

【问题讨论】:

    标签: c for-loop if-statement nested


    【解决方案1】:

    您忘记在几个地方取消引用您的指针。

    这一行编译的事实

    sum = xptr;
    

    不应误导您:C 允许您将指针转换为仅带有警告的数字,而在大多数情况下这是一个错误。这一行应该是

    sum = *xptr;
    

    它不允许你乘以指针,所以你的指针平方的表达式是一个错误:

    (xptr*xptr)
    

    您应该取消引用指针两次,即写入

    ((*xptr)*(*xptr))
    

    或为*xptr 的当前值创建一个单独的变量并使用它来代替:

    const double x = *xptr;
    ti = (x*x)/ti;
    

    注意:这个练习应该是纯理论的,因为sinHyper 不会改变*xptr*nptr。因此,您应该将它们作为值传递,而不是作为指针传递:

    double sinHyper(const double x, const int n) {
        ...
    }
    ...
    sinhx = sinHyper(x, n);
    

    【讨论】:

    • 我改变了一切,现在我收到一个警告:对 i 的操作可能在 for 行上未定义
    • @Cplan 代码的修改版本非常适合我 (demo)。我将i = i + 1 修改为更常见的i++
    • 好的,它现在可以工作了,结果证明我在计算中犯了一个错误,这就是为什么我没有得到我想要的值,但是非常感谢你帮了我很多忙! !!!!!!
    • @Cplan 欢迎您!如果这回答了您的问题,请考虑通过单击旁边的灰色复选标记来接受答案。这将使其他网站访问者知道您的问题已解决,并为您赢得 Stack Overflow 上的新徽章。
    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多