我的for陈述有问题。我正在尝试在内部嵌套if语句,并且正在使用指针。我已经尝试了一切,并且遍及整个互联网。我已在有错误的行旁添加了注释,但如果您发现其他错误,请通知我。谢谢

#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;
}

最佳答案

您忘记了在多个地方取消引用指针。

该行编译的事实

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);

关于c - 如何在c中的for循环中使用嵌套的if else语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46866963/

10-12 04:11