A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

打洞的土拨鼠

中级黑马

  • 黑马币:130

  • 帖子:11

  • 精华:0

本帖最后由 打洞的土拨鼠 于 2014-6-14 22:58 编辑
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         char name1;
  5.         scanf("%c", &name1);
  6.         printf("%c\n", name1);

  7.         char name2 = 'BOOK';
  8.         printf("%c\n", name2);
  9. }
复制代码

这个是源代码。
我能理解在name2中,C将字符常量视为int类型而非char类型,这将4个独立的8位ASCII码存储在一个32位单元中。这个时候,将book赋给char变量,那只有最后8位会起作用,因此变量值是'K';

我的问题是:
在char name1中,我scanf调试的时候,同样输入BOOK,显示的结果是B,这是为什么呢?

我用的是VS2013编写的,可能代码有点点不一样。运行结果如图:


char和scanf()结合之后的问题.png (10.76 KB, 下载次数: 26)

char和scanf()结合之后的问题.png

char和scanf()结合之后的问题.png (10.76 KB, 下载次数: 21)

char和scanf()结合之后的问题.png

评分

参与人数 1技术分 +1 收起 理由
ios风痕 + 1

查看全部评分

3 个回复

倒序浏览
char变量只能接收一个字符,通过scanf输入,当输入多个字符时,只会取最前面的一个字符(B)存入name1中,所以输出的是B.
回复 使用道具 举报
瑾❤ 发表于 2014-6-12 22:11
char变量只能接收一个字符,通过scanf输入,当输入多个字符时,只会取最前面的一个字符(B)存入name1中, ...

请问下:那name2中是为何截取的最后个来显示“K”的值?
回复 使用道具 举报
打洞的土拨鼠 发表于 2014-6-13 23:45
请问下:那name2中是为何截取的最后个来显示“K”的值?

如图,仅供参考

result.png (12.19 KB, 下载次数: 17)

result.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马