如何在函数内部正确使用 While?

How can I properly use While inside a Function?

首先,我对编程还很陌生,这是我的第一个问题。我正在创建一个代码来计算梯形的面积,我需要做相同的 while() 3 次不同的时间来检查数字是否大于零,如果不是,它会继续询问数,直到它是。然后我决定创建一个 function() 以使代码 干净 不那么重复 ,问题是,我可能做错了什么,因为我只得到返回给变量的负数。

我截取了部分代码给大家看,也是为了测试。我总是先输入 negative 数字以激活 function() 内的 while(),然后输入 positive 数字,但我打印的是负数而不是新数字。关于如何在 largeBase 变量中获取新数字的任何提示?这是代码:

#include <stdio.h>

int checkBelowZero(float x);

int main() {

  float largerBase, x;

  printf("\n\t\tTrapezoid's area calculation\n\n");
  printf("Type the trapezoid's larger base: ");
  scanf("%f", & largerBase);

  checkBelowZero(largerBase);

  printf("%.2f", largerBase);

  return 0;
}

int checkBelowZero(float x) {

  while (x <= 0)

  {
    printf("\nThe number has to be greater than zero (0).\n\nPlease, type it again: ");
    scanf("%f", & x);
  }
  return x;

}

解决方案 1

函数参数是给定值的副本。如果修改参数的值,实际上并没有修改传递的原始变量。

但是,当按引用传递时,情况并非如此。如果将变量的地址传递给函数,然后调用指向该函数的指针,则可以修改传递的变量的真实值。我有 re-written 有问题的功能,所以你可以看看它是如何工作的:

// the parameter is expecting a pointer to something
void checkBelowZero(float *x) {
   /*- to read the parameters value, call a pointer to it
     - "x" is actually just a number which is the memory 
     location of the variable you passed. Calling a pointer
     to it reads what's at that address, in this case the 
     value of your variable "largerBase".
   */
  while (*x <= 0)

  {
    printf("\nThe number has to be greater than zero (0).\n\nPlease, type it again: ");
    /* - Since "x" already contains the base address of
       "largerBase", you shouldn't call the base address of
       that
    */
    scanf("%f", x);
  }

}

确保修改原型

void checkBelowZero(float *x);

然后这样调用函数

checkBelowZero(&largerBase);

这确保传递我们变量的基地址。


解决方案 2

由于您正在 return 设置值 x,您实际上可以将 largerBase 的值设置为函数的 return 值。

largerBase = checkBelowZero(largerBase);

请记住,x 不需要定义为变量。因为它是一个只能被它所属的函数访问的参数