C语言程序无法读取输入值,始终返回2.5的问题求助
问题分析与修复方案
核心问题
程序无法读取输入数值、始终返回2.5,根源在于scanf的两处错误使用:
- 读取
double类型变量时,错误用了%f格式符(%f对应float,double需用%lf); scanf要求传入变量的地址完成赋值,你直接传了num变量本身,导致内存访问异常,num始终是未初始化的随机值(通常为0),代入equ函数后算出(5+0)/2=2.5。
修复后的完整代码
#include <stdio.h> double equ(double num); int main() { double num; double * pnum = # printf("Give me a number from 1-10: \n"); scanf("%lf", &num); // 修复格式符与地址传递问题 printf("%f \n%p \n", equ(num), pnum); // &pnum是指针自身的地址,若要打印num的地址,用&num或pnum即可 char sign = ','; char characterName1[20]; char characterName2[]="Alfred"; printf("Give me a name: "); scanf("%s", characterName1); printf("-Good day %s\n", characterName1); printf("-Good day to you too%c %s", sign, characterName2); return 0; } double equ(double num){ double result; if(num<5){ result = (5 + num)/2; } else { result = 5 + num; } return result; }
额外说明
- 修复后的
scanf("%lf", &num)可正确读取输入数值到num变量; - 原代码中
printf里的&pnum是指针变量自身的地址,若要打印num的内存地址,直接用pnum或&num更符合逻辑。
内容的提问来源于stack exchange,提问作者Nksho27
相关产品推荐
相关产品推荐

