我有一个问题
大佬们,为什么#include<stdio.h>
int main()
{
int a;
scanf("%c",&a);
printf("%d",a);
}
不能把字符转换为整型,而
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
printf("%c",a);
}
可以把整型转换为字符啊?原理是什么呢? 都可以转换啊 , 第一个代码没问题的
转换就是把这个字符的 ascii 码打出来 在计算机内部,所有信息都是用数字进行记录的,其中,ASCII 字符一共128个,对应的编码范围是 0~127,在 ASCII 编码的范围内,可以说字符就是数字,数字就是字符,例如,数字 49 和 65 分别对应于字符 '0' 和 'A',在 printf() 中,用 "%d" 进行显示,就是整型数 49 和 65,如果用 "%c" 进行显示,就是字符 '0' 和 'A'。 柿子饼同学 发表于 2022-9-15 18:42
都可以转换啊 , 第一个代码没问题的
转换就是把这个字符的 ascii 码打出来
第一个我用dev编译的,不行,比如说我输入1,打印出来是1643825 jackz007 发表于 2022-9-15 18:48
在计算机内部,所有信息都是用数字进行记录的,其中,ASCII 字符一共128个,对应的编码范围是 0~ ...
我想问的是为什么不能把字符转换为整型 正天圣人 发表于 2022-9-15 18:52
我想问的是为什么不能把字符转换为整型
字符转换为整型是什么意思?把 '5' 转变成 5 ? jackz007 发表于 2022-9-15 19:01
字符转换为整型是什么意思?把 '5' 转变成 5 ?
对,但是第一个代码不是这么运作的,为什么? jackz007 发表于 2022-9-15 19:01
字符转换为整型是什么意思?把 '5' 转变成 5 ?
也不完全是,就是‘a’转换为97这种 本帖最后由 jackz007 于 2022-9-15 19:23 编辑
给你说了半天字符就是数字,数字就是字符,'a' 就是 97,97 就是 'a',编译、运行一下下面的代码你就明白了。
#include <stdio.h>
int main(void)
{
char c = 'a' ;
printf("%d\n" , c) ;
}
就是说,字符 'a' 就是数字 97 本身,无需做任何变换,只有把数字 97 当成字符("%c")来显示的时候,它才是 'a'。 jackz007 发表于 2022-9-15 19:18
给你说了半天字符就是数字,数字就是字符,'a' 就是 97,97 就是 'a',编译、运行一下下面的代码你 ...
大佬,你这个代码行,可是为什么我的第一个代码执行输入a之后打印的数字是8位数字,而且数字是随机的? 正天圣人 发表于 2022-9-15 19:24
大佬,你这个代码行,可是为什么我的第一个代码执行输入a之后打印的数字是8位数字,而且数字是随机的?
因为你定义的 a 是一个整型数,一个整型数占用的是 4 个字节,scanf("%c" , & a) 拿到的 a 只有一个字节,当你用 printf("%d" , a) 显示 a 的时候,是按 4 个字节来显示的,这 4 个字节中,只有一个是有效的,其余 3 个都是无效的,所以,你看到了莫名其妙的数值,只要在 printf() 中强调一下对 a 按 char 类型变量进行显示就可以解决问题
#include<stdio.h>
int main(void)
{
int a ;
scanf("%c" , & a) ;
printf("%d", (char) a) ;
} jackz007 发表于 2022-9-15 19:32
因为你定义的 a 是一个整型数,一个整型数占用的是 4 个字节,scanf("%c" , & a) 拿到的 a 只有 ...
可是大佬,如果4个字节中有一个是有效的,那至少会打印97或者9和7吧,可是我的第一个代码有时候9和7都没有 正天圣人 发表于 2022-9-15 19:39
可是大佬,如果4个字节中有一个是有效的,那至少会打印97或者9和7吧,可是我的第一个代码有时候9和7都没 ...
11 楼的代码运行结果是否符合预期? jackz007 发表于 2022-9-15 19:52
11 楼的代码运行结果是否符合预期?
11楼可以,但是我想知道到底为什么我的第一个代码不行,如果4个字节中有一个是有效的,那至少会打印97或者9和7吧,可是我的第一个代码有时候9和7都没有 下面的代码可以证明我的解释
#include<stdio.h>
int main(void)
{
int a ;
scanf("%c" , & a) ;
printf("%d", a & 0xff) ; // 二进制操作,取用变量 a 的第 4 个字节,把前 3 个字节置 0
} jackz007 发表于 2022-9-15 20:00
下面的代码可以证明我的解释
谢谢大佬,我懂了 正天圣人 发表于 2022-9-15 20:05
谢谢大佬,我懂了
其实,所有的麻烦都来自对 a 的定义,因为你把它定义成了 int,如果你把它定义成 char,那就不会有任何问题。
页:
[1]