user-0 提问: 求求大佬帮我看看scanf函数，我很困扰！！

回复:
user: user-1
content: 在另一个贴里给你回复过查看内存信息 scanf("%d", &i);       //如果用%c，只会接收一个输入字符（即使用户输入多个字符也只会接收第1个字符），所以不会造成内存越界（char的内存只能存1个字符），但是用%d就会接收多个字符，char的内存可能容不下，会造成内存越界，所以这里会警报 printf("x=%c\n", x);   //打印只是截取int的内存低位信息转成字符输出，所以没问题

user: user-2
content: char类型的只有１字节的大小，％ｄ是整型有四字节。这样会溢出，当然你要是在别的地方用可能也不会报错，就是结果可能出错，但是scanf这个函数他是要求输入与写入的类型相对应的，这是不会去转化的，所以有一点不对应函数会报错，这是这个函数的约定 而printf是输出函数，他是会把你变量转化为你前面的类型再输出的，类型可以转就不会报错。而你这个值是特殊值，６５在字符里刚好是Ａ的字符，所以可以作为字符输出

user: user-3
content: 按标准来就是了，把时间耗费在这上面不值得

user: user-4
content: 引用 8 楼 weixin_45906870 的回复:引用 7 楼 user-4 的回复：[quote=引用 6 楼 weixin_45906870 的回复:] [quote=引用 3 楼 user-4 的回复：][quote=引用 2 楼 weixin_45906870 的回复:] [quote=引用 1 楼 user-4 的回复：]因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关 [/quote]那我这里为啥scanf会报警告，printf却不会呢？[/quote]  和编译器或者IDE有关把  我这儿都没有warning[/quote]你用什么编译器？[/quote]  vscode

user: user-0
content: 引用 7 楼 user-4 的回复：引用 6 楼 weixin_45906870 的回复:[quote=引用 3 楼 user-4 的回复：][quote=引用 2 楼 weixin_45906870 的回复:] [quote=引用 1 楼 user-4 的回复：]因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关 [/quote]那我这里为啥scanf会报警告，printf却不会呢？[/quote]  和编译器或者IDE有关把  我这儿都没有warning[/quote]你用什么编译器？

user: user-4
content: 引用 6 楼 weixin_45906870 的回复:引用 3 楼 user-4 的回复：[quote=引用 2 楼 weixin_45906870 的回复:] [quote=引用 1 楼 user-4 的回复：]因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关 [/quote]那我这里为啥scanf会报警告，printf却不会呢？[/quote]  和编译器或者IDE有关把  我这儿都没有warning

user: user-0
content: 引用 3 楼 user-4 的回复：引用 2 楼 weixin_45906870 的回复:[quote=引用 1 楼 user-4 的回复：]因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关 [/quote]那我这里为啥scanf会报警告，printf却不会呢？

user: user-0
content: 引用 4 楼 user-4 的回复：引用 3 楼 user-4 的回复:[quote=引用 2 楼 weixin_45906870 的回复:] [quote=引用 1 楼 user-4 的回复：]因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关 [/quote]  没啥特殊的需求 乖乖的用数据类型就行了 别搞这个有的没的[/quote]我只是想弄清楚

user: user-4
content: 引用 3 楼 user-4 的回复:引用 2 楼 weixin_45906870 的回复:[quote=引用 1 楼 user-4 的回复：]因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关 [/quote]  没啥特殊的需求 乖乖的用数据类型就行了 别搞这个有的没的

user: user-4
content: 引用 2 楼 weixin_45906870 的回复:引用 1 楼 user-4 的回复：因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？  这也不是绝对的   通常来说 char占据1个字节 范围0x0~0xff  int 4个字节 范围0x0~0xffffffff  如果int转char  很有可能造成数据丢失 比如0xff00aaaa 转成char  结果可能就剩0xff了  也有可能是0xaa 而char 转int  比如char = 0xff  转换为int  有可能是0xff000000  也有可能是0x000000ff  和CPU有关

user: user-0
content: 引用 1 楼 user-4 的回复：因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的你的意思是大的转小的会出错，小的才可以转大的？

user: user-4
content: 因为有类型转换啊   程序里不同的数据类型之间是可以相互转换的