求助关于【S1E8动动手1】,为什么name后面要加【256】?
【S1E8动动手1】为什么name后面要加【256】?不加程序没有输出直接结束,加了【256】就可以完整运行了,但是这个【256】的含义是为什么?为什么要加它?是不是定义了char name 这个name要输入不止一个汉字因此要给它套一个范围?
等级太低传不了图片,以下是复制的代码
【这是成功运行的】
#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%f", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54; // 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
}
运行结果
请输入您的姓名:小甲鱼
请输入您的身高(cm):170
请输入您的体重(kg):60.1
========== 正在为您转换 ==========
小甲鱼的身高是66.93(in),体重是132.67(lb)。
--------------------------------
Process exited after 13.43 seconds with return value 0
请按任意键继续. . .
【这是去掉256,运行出问题的】
#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%f", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54; // 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
}
结果
请输入您的姓名:小甲鱼
--------------------------------
Process exited after 8.214 seconds with return value 3221225477
请按任意键继续. . .
这是一个字符数组,存放的是字符串,你光写一个char name存放的就是字符了
char name是定义了一个char类型的数组,
char name 是定义了一个char类型的变量
你这不叫去掉256,你这是将数组变成了单个字符变量
真正的去掉256 应该是char name[] 假如你写的是char name就说明你定义的是一个字符,注意是一个字符;
而加入你写的是char name,就说明你定义的是一个字符数组,也可以看成一个字符串;
而我们输入的汉字,一个汉字占两个字节,也就是两个字符的大小,所以你用写char name就会出错 chichengsun 发表于 2020-3-25 12:16
假如你写的是char name就说明你定义的是一个字符,注意是一个字符;
而加入你写的是char name,就说明 ...
那name【256】可以输入的字符数量是多少?我输入”一二三四五六七八九十一二三四五六七八九十“它也可以成功运行 char name 表示声明一个叫 name 的、长度为 256 的字符数组,去掉 就编程声明一个叫 name 的字符了。 zltzlt 发表于 2020-3-25 13:23
char name 表示声明一个叫 name 的、长度为 256 的字符数组,去掉 就编程声明一个叫 name 的字 ...
长度256是多长?有多少字符? 未被驯化的甲鱼 发表于 2020-3-25 13:26
长度256是多长?有多少字符?
256 个字符呀 zltzlt 发表于 2020-3-25 13:26
256 个字符呀
也就是说,我name最多可以输入一个256个字的名字,是吗? 未被驯化的甲鱼 发表于 2020-3-25 13:33
也就是说,我name最多可以输入一个256个字的名字,是吗?
是的,当然你也可以设置成 500 甚至更多,这样能输入更多的字符 zltzlt 发表于 2020-3-25 13:35
是的,当然你也可以设置成 500 甚至更多,这样能输入更多的字符
可是我name【1】也可以输入超过一个字符的名字是为什么?name【1】运行输入名字”一二三四五“还是可以成功运行,而且输出还是完整”一二三四五“ 未被驯化的甲鱼 发表于 2020-3-25 13:39
可是我name【1】也可以输入超过一个字符的名字是为什么?name【1】运行输入名字”一二三四五“还是可以成 ...
C 不支持中文吧
这种应该不大可能
是不是看错了~ 本帖最后由 淡笑无痕丶 于 2020-3-25 14:21 编辑
未被驯化的甲鱼 发表于 2020-3-25 13:39
可是我name【1】也可以输入超过一个字符的名字是为什么?name【1】运行输入名字”一二三四五“还是可以成 ...
你用的是什么编译器 肯定是会给你警告的 并且只会输出第一个字符。
我的测试代码如下:
#include <stdio.h>
int main()
{
char arr = "Fuck";
printf(arr);
putchar('\n')
}
环境是CentOS7,GCC4.8.5
结果翻译成中文是这样的
用以初始化字符数组的字符串太长。
简答地来说 一个字符住一个单位 你的字符数组只有一个单位 你却安排了五个字符住进去 那不就得有四个字符被挤出来了吗?
liuzhengyuan 发表于 2020-3-25 14:10
C 不支持中文吧
这种应该不大可能
是不是看错了~
#include <stdio.h>
int main()
{
char name;
float height, weight;
printf("请输入您的姓名:");
scanf("%s", name);
printf("请输入您的身高(cm):");
scanf("%f", &height);
printf("请输入您的体重(kg):");
scanf("%f", &weight);
printf("========== 正在为您转换 ==========\n");
height = height / 2.54; // 厘米转换为英寸
weight = weight / 0.453; // 公斤转换为磅
printf("%s的身高是%.2f(in),体重是%.2f(lb)。\n", name, height, weight);
return 0;
}
运行后
请输入您的姓名:去微软推哦维护我去护额回去无任何
请输入您的身高(cm):123
请输入您的体重(kg):23
========== 正在为您转换 ==========
去微软推哦维护我去护额回去无任何的身高是48.43(in),体重是50.77(lb)。
--------------------------------
Process exited after 20.25 seconds with return value 3221225477
请按任意键继续. . . 淡笑无痕丶 发表于 2020-3-25 14:20
你用的是什么编译器 肯定是会给你警告的 并且只会输出第一个字符。
我的测试代码如下:
这段代码是会警告,但是如果把 arr改成运行后输入就可以顺利运行了
#include <stdio.h>
int main()
{
char arr;
scanf("%s",&arr);
printf(arr);
putchar('\n');
}
运行后输入 大于一个字符
大于一个字符
大于一个字符
--------------------------------
Process exited after 10.04 seconds with return value 3221225477
请按任意键继续. . . liuzhengyuan 发表于 2020-3-25 14:10
C 不支持中文吧
这种应该不大可能
是不是看错了~
用Dev C++ 5.11写的 未被驯化的甲鱼 发表于 2020-3-25 14:47
用Dev C++ 5.11写的
应该是可以的吧(我之前还没试过中文)
但是不建议
页:
[1]