jenghn 发表于 2022-1-9 18:37:14

关于带你学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上执行的

求教为什么会这样?怎么解决?
谢谢!

大马强 发表于 2022-1-9 18:55:41


#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;
}

傻眼貓咪 发表于 2022-1-9 18:57:37

{:10_264:}{:10_254:} {:10_266:}

大马强 发表于 2022-1-9 18:59:15

本帖最后由 大马强 于 2022-1-9 19:01 编辑

大马强 发表于 2022-1-9 18:55


原因我还想不明白,把声明换了就好
int 和 float都可以

jhq999 发表于 2022-1-9 21:58:55

本帖最后由 jhq999 于 2022-1-9 22:01 编辑

大马强 发表于 2022-1-9 18:59
原因我还想不明白,把声明换了就好
int 和 float都可以

scanf("%d", &height);//%d接收4个字节。把这个&height指针地址的后3个字节变成了0,如果紧挨着它后面有变量,从而影响了它后面变量的值

大马强 发表于 2022-1-9 22:05:53

jhq999 发表于 2022-1-9 21:58
scanf("%d", &height);//%d接收4个字节。把这个&height指针地址的后3个字节变成了0,如果紧挨着它后面 ...

可name是在height前边的,我调试的时候name就莫名其妙的全边零了{:10_266:}

jhq999 发表于 2022-1-9 22:19:36

本帖最后由 jhq999 于 2022-1-9 22:21 编辑

大马强 发表于 2022-1-9 22:05
可name是在height前边的,我调试的时候name就莫名其妙的全边零了

分配内存时可能系统把name分配在height后面,然后把name、name、name都变成0

大马强 发表于 2022-1-9 22:56:07

jhq999 发表于 2022-1-9 22:19
分配内存时可能系统把name分配在height后面,然后把name、name、name都变成0

{:10_297:}原来是这样
页: [1]
查看完整版本: 关于带你学C带你飞课后作业S1E8的动动手(1.)题