我想编写一个C程序,它接受用户输入并比较最小值和最大值的先前值。我遇到的麻烦是值的比较不断重置自己而不是使用先前输入的值作为最小值和最大值。程序将使用文件结束循环来停止程序.....
以下是我对该计划的尝试:
#include <stdio.h>
//variables for the functions:
double MinMax(double a);
//main program
int main (){
double num;
while (num!=EOF){
printf("Enter a real number: ");
scanf("%lf",&num);
MinMax(num);
}
return 0;
}
//function
double MinMax (double a){
double max=0,min=0;
if (a>max){
max=a;
}
else if (a<min){
min=a;
}
else {
}
printf("The max is %lf and the min is %lf\n",max,min);
}
答案 0 :(得分:2)
您可以通过两种方式修复代码:
min
和max
变量static
或min
和max
。第一种方法需要进行以下更改:
static double max=0, min=0;
第二种方法更复杂,但也更好:min
和max
需要移至main
,而MinMax
的签名需要采用它们参考:
double MinMax(double a, double& min, double& max);
答案 1 :(得分:0)
它没有保存,因为您在函数min
范围内声明了max
和MinMax
。因此,当函数返回时,这些变量将从堆栈中删除。如果你想使用一个函数,我建议你通过引用传递min和max:
double MinMax(double a, double &min, double &max) {...}
因此,在函数调用之间保存更新的值。
答案 2 :(得分:0)
#include <stdio.h>
//variables for the functions
void MinMax(double a, double* max, double* min);
//main program
int main() {
double num = 0;
double min = 0;
double max = 0;
printf("Enter a real number: ");
scanf("%lf",&num);
//To exit the loop and avoid undefined behaviour
while (num != -999) {
MinMax(num, &max, &min);
printf("Enter a real number: ");
scanf("%lf",&num);
}
return 0;
}
void MinMax (double a, double* max, double* min) {
if (a > *max)
*max = a;
if (a < *min)
*min = a;
printf("The max is %lf and the min is %lf\n", *max, *min);
}
您也可以选择使用:
static double max = 0, min = 0;
这将在MinMax函数之上,但解决问题的最佳方法是使用指针通过引用传递。如上所示:
void MinMax(double a, double* min, double* max)
注意:C在原型中使用*而不是&amp;。
快乐的编码。