黑马程序员技术交流社区

标题: char和scanf()结合之后的一个小问题 [打印本页]

作者: 打洞的土拨鼠    时间: 2014-6-11 23:41
标题: char和scanf()结合之后的一个小问题
本帖最后由 打洞的土拨鼠 于 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, 下载次数: 30)

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

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

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

作者: 瑾❤    时间: 2014-6-12 22:11
char变量只能接收一个字符,通过scanf输入,当输入多个字符时,只会取最前面的一个字符(B)存入name1中,所以输出的是B.
作者: 打洞的土拨鼠    时间: 2014-6-13 23:45
瑾❤ 发表于 2014-6-12 22:11
char变量只能接收一个字符,通过scanf输入,当输入多个字符时,只会取最前面的一个字符(B)存入name1中, ...

请问下:那name2中是为何截取的最后个来显示“K”的值?
作者: 瑾❤    时间: 2014-6-14 15:10
打洞的土拨鼠 发表于 2014-6-13 23:45
请问下:那name2中是为何截取的最后个来显示“K”的值?

如图,仅供参考

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

result.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2