我在c中写了一个函数,它应该扫描四个值并将它们分配给四个变量:
double xmin,xmax,ymin,ymax;
double set(double xmin, double xmax, double ymin, double ymax){
printf("\nxmin:\t");
scanf(" %lf",&xmin);
printf("\nxmax:\t");
scanf(" %lf",&xmax);
printf("\nymin:\t");
scanf(" %lf",&ymin);
printf("\nymax:\t");
scanf(" %lf",&ymax);
printf("\n");
return xmin,xmax,ymin,ymax;}
稍后我在main函数中使用该函数时,某些值会丢失。我检查了调试器,发现这些值甚至没有首先分配。所以问题必须出在这个功能上。
答案 0 :(得分:1)
函数set
初始化自己的参数变量并返回最后一个变量。它使名称的全局变量保持不变。删除参数变量可以解决问题:
double xmin, xmax, ymin, ymax;
void set(void) {
printf("\nxmin:\t");
scanf(" %lf", &xmin);
printf("\nxmax:\t");
scanf(" %lf", &xmax);
printf("\nymin:\t");
scanf(" %lf", &ymin);
printf("\nymax:\t");
scanf(" %lf", &ymax);
printf("\n");
}
但更好的方法是传递变量的地址,这些变量可以在main
的本地变量,并检查scanf()
的返回值是否正确转换:
int set(double *xmin, double *xmax, double *ymin, double *ymax) {
printf("\nxmin:\t");
if (scanf("%lf", xmin) != 1)
return -1;
printf("\nxmax:\t");
if (scanf("%lf", xmax) != 1)
return -1;
printf("\nymin:\t");
if (scanf("%lf", ymin) != 1)
return -1;
printf("\nymax:\t");
if (scanf("%lf", ymax) != 1)
return -1;
printf("\n");
return 0;
}
以main()
方式拨打电话:
int main(void) {
double xmin, xmax, ymin, ymax;
if (set(&xmin, &xmax, &ymin, &ymax)) {
/* initialization error */
exit(1);
}
...
}
答案 1 :(得分:0)
将指针传递给您的值而不是值; return
- 陈述已经过时;请注意,在scanf
中,&
符号已被删除,因为您已经指向了该值。
void (double *xmin, double *xmax, double *ymin, double *ymax) {
printf("\nxmin:\t");
scanf(" %lf",xmin);
printf("\nxmax:\t");
scanf(" %lf",xmax);
printf("\nymin:\t");
scanf(" %lf",ymin);
printf("\nymax:\t");
scanf(" %lf",ymax);
printf("\n");
}
在函数main中,不要忘记传递引用:
int main {
double xmin=0.0,xmax=0.0,ymin=0.0,ymax=0.0;
set(&xmin, &xmax, &ymin, &ymax);
...