为了账号安全,请及时绑定邮箱和手机立即绑定

关于char字符输出的问题?

关于char字符输出的问题?

C
Artion_Walker 2017-10-12 16:09:20
char a='y';printf("%c\n",a);运行这一段输出是y,嗯这个没问题但把y改成yes,输出的为什么是s
查看完整描述

2 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

你是这样改的吗  char a = 'yes';   并且只改了这里吗?

单引号括起来的应该表示一个字符,所以一般你应该在里面只放一个字母。


但其实 C 语法允许在单引号内放一个以上字符,这样它表示一个 int 值。但如何确定它的值是标准未指定的(也就是由各个实现自己决定)。

因为这是实现相关的,我只能根据你的结果进行推测:

很有可能,你的编译器将 'yes' 这样的多字符写法实现为“把这个字符序列按 int 的大小截断”。那么这个 int 值的低位字节就是字符 's'。 而等于号右侧作为一个 int 值在为等于号左侧的 char 提供初值时也会截断,只取低地址位。所以 a 得到的是表示字符 's'的值。  后面 printf 就打印出 s。

上述斜体内容如果看不懂也没关系。你只要知道单引号主要用于表示一个字符,别写 'yes' 这样的。  说明下:并不是说单引号内只能放一个,而是只能放“表示一个字符”的内容。比如可以用转义字符来表示一个字符,像是 '\n'  '\0' 之类的,这时引号内自然会有多个字。


顺便说一下:

如果想表示字符串,就要用双引号括起来,如 "yes"。  printf 打印字符串的格式化指示符是 %s,如 printf("%s", "yes");

查看完整回答
1 反对 回复 2017-10-12
?
qq_莫非

TA贡献257条经验 获得超92个赞

printf("%c\n",a);

你把%c换成%s呢

查看完整回答
反对 回复 2017-10-12
  • Artion_Walker
    Artion_Walker
    十分感谢
  • onemoo
    onemoo
    如果你改成这样的话,也是不对的。 因为%s对应的是字符串,可是后面的a是个char类型,所以无法正确打印。
  • 2 回答
  • 1 关注
  • 1854 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信