关于带你学C带你飞课后作业S1E8的动动手(1.)题
关于带你学C带你飞课后作业S1E8的动动手(1.)题以下是我写的程序
#include <stdio.h>
int main() {
char name;
unsigned char height;
float weight, inHeight, lbWeight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%d", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
inHeight = height * 0.39;
lbWeight = weight * 2.2;
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, inHeight, lbWeight);
return 0;
}
但是运行后的结果是:
请输入您的姓名:哈哈哈
请输入您的身高(cm):180
请输入您的体重(kg):70
========== 正在为您转换 ==========
的身高是70.20(in),体重是154.00(lb)。
名字部分不显示。
我也对照了一下答案,name的处理没有问题啊。scanf里的name 前面加了&也没用。
在VB上执行的
求教为什么会这样?怎么解决?
谢谢!
#include <stdio.h>
int main() {
char name;
int height; // unsigned char 这个就会出问题
float weight, inHeight, lbWeight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%d", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
inHeight = height * 0.39;
lbWeight = weight * 2.2;
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, inHeight, lbWeight);
return 0;
} {:10_264:}{:10_254:} {:10_266:} 本帖最后由 大马强 于 2022-1-9 19:01 编辑
大马强 发表于 2022-1-9 18:55
原因我还想不明白,把声明换了就好
int 和 float都可以 本帖最后由 jhq999 于 2022-1-9 22:01 编辑
大马强 发表于 2022-1-9 18:59
原因我还想不明白,把声明换了就好
int 和 float都可以
scanf("%d", &height);//%d接收4个字节。把这个&height指针地址的后3个字节变成了0,如果紧挨着它后面有变量,从而影响了它后面变量的值 jhq999 发表于 2022-1-9 21:58
scanf("%d", &height);//%d接收4个字节。把这个&height指针地址的后3个字节变成了0,如果紧挨着它后面 ...
可name是在height前边的,我调试的时候name就莫名其妙的全边零了{:10_266:} 本帖最后由 jhq999 于 2022-1-9 22:21 编辑
大马强 发表于 2022-1-9 22:05
可name是在height前边的,我调试的时候name就莫名其妙的全边零了
分配内存时可能系统把name分配在height后面,然后把name、name、name都变成0 jhq999 发表于 2022-1-9 22:19
分配内存时可能系统把name分配在height后面,然后把name、name、name都变成0
{:10_297:}原来是这样
页:
[1]