gpt4 book ai didi

c - 无法通过 scanf 正确分配值

转载 作者:行者123 更新时间:2023-11-30 20:21:44 25 4
gpt4 key购买 nike

我用 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;}

当我稍后在主函数中使用该函数时,不知何故,这些值会丢失。我检查了调试器,发现这些值甚至没有首先被分配。所以问题一定出在这个函数上。

最佳答案

函数set初始化它自己的参数变量并返回最后一个。它保持名称 name 的全局变量不变。删除参数变量可以解决问题:

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

关于c - 无法通过 scanf 正确分配值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com