C语言scanf读取float值后printf输出仅为0.00000问题求助
C语言scanf读取float后printf输出0.000000的问题解决
你的输出异常由printf的格式符与参数不匹配导致,和scanf本身无关,具体有两处错误:
- float变量输出错误:
printf("%f", &grade)中%f格式符要求传入float类型的值,你传入的&grade是grade变量的内存地址(指针类型),类型不匹配触发未定义行为,最终输出0.000000。正确写法是删除取地址符&,改为printf("%f", grade)。 - 字符变量输出错误:
printf("%s \n", &choise)中%s格式符要求传入以\0结尾的字符串首地址,单个char变量的地址没有字符串结束标记,会触发越界读内存的未定义行为,大概率输出乱码。正确写法是使用%c格式符,直接传入char变量本身:printf("%c \n", choise)。
修正后的完整代码如下:
#include <stdio.h> int main() { float grade; char choise; do { printf ("Type your grade: "); scanf("%f", &grade); printf("Want to continue? s/n: "); scanf(" %c", &choise); printf("%c \n", choise); printf("%f\n", grade); } while(choise != 'n'); return 0; }
补充说明:只有scanf读取变量内容时需要传入变量地址,printf输出基础类型变量时直接传入变量本身即可。
内容的提问来源于stack exchange,提问作者SarThori
相关产品推荐
相关产品推荐

