关于c语言输入输出问题
#include<stdio.h>main(){inta;scanf("%c",&a);printf("%d",a);}这一个简短的程序却又很多问题。1.问什么这样输出的...
#include <stdio.h>
main()
{
int a;
scanf("%c",&a);
printf("%d",a);
}
这一个简短的程序却又很多问题。
1.问什么这样输出的不是a的ASCII码,而要将int改为char(内存中字符不是以ASC码储存吗)
2.问什么给a附一个初值就可以了呢,比如int a=1; 展开
main()
{
int a;
scanf("%c",&a);
printf("%d",a);
}
这一个简短的程序却又很多问题。
1.问什么这样输出的不是a的ASCII码,而要将int改为char(内存中字符不是以ASC码储存吗)
2.问什么给a附一个初值就可以了呢,比如int a=1; 展开
6个回答
展开全部
1、内存中字符不是以ASC码储存吗?
在内存中,存储的字符是其ASCII值,如:'1'在内存中存储的是49
2、什么这样输出的不是a的ASCII码?
因为a是个整型数据类型,它占四个字节,scanf("%c",&a);这时,只是给a的一个字节进行了赋值,其它字节内容是随机的,因此,printf("%d",a);按整型输出时,是按四个字节的内容进行输出,就不是你想看到的内容了。如果你输出printf("%c",a); 你可以看到相应的字符。
3、问什么给a附一个初值就可以了呢,比如int a=1;
int a=1;这样就将a的高字节位置全清成0了,当你再用scanf("%c",&a);赋值时,低字节被改动为字符的ASCII值,高字节全是0,这样,printf("%d",a);按整型输出时,就能看到你想得到的数值了。
在内存中,存储的字符是其ASCII值,如:'1'在内存中存储的是49
2、什么这样输出的不是a的ASCII码?
因为a是个整型数据类型,它占四个字节,scanf("%c",&a);这时,只是给a的一个字节进行了赋值,其它字节内容是随机的,因此,printf("%d",a);按整型输出时,是按四个字节的内容进行输出,就不是你想看到的内容了。如果你输出printf("%c",a); 你可以看到相应的字符。
3、问什么给a附一个初值就可以了呢,比如int a=1;
int a=1;这样就将a的高字节位置全清成0了,当你再用scanf("%c",&a);赋值时,低字节被改动为字符的ASCII值,高字节全是0,这样,printf("%d",a);按整型输出时,就能看到你想得到的数值了。
展开全部
这得从C语言的内存机制谈起,假定你用的intel的CPU,Console下编译这段程序。
int a = 0xAABB 在内存中存储是 &a的地址 BB AA 方式存储。
你用 scanf("%c",&a); 相当于 向 BB 写入一字节,但是AA的值由于没有被初始化,是不确定的,如果你运气不好,AA不是零,那么输出的就不是 ASC码了。
当你用 a = 1 进行初始化后相当于将 AA 设置成了 0,所以输出的是 字符的ASCII码。如果你把 a 初始化成 大于255的数字,你再看看,还是不对。
所以,根本的问题是你的程序写的不对,应该是:
char a;
scanf("%c", &a);printt("%d", a);
int a = 0xAABB 在内存中存储是 &a的地址 BB AA 方式存储。
你用 scanf("%c",&a); 相当于 向 BB 写入一字节,但是AA的值由于没有被初始化,是不确定的,如果你运气不好,AA不是零,那么输出的就不是 ASC码了。
当你用 a = 1 进行初始化后相当于将 AA 设置成了 0,所以输出的是 字符的ASCII码。如果你把 a 初始化成 大于255的数字,你再看看,还是不对。
所以,根本的问题是你的程序写的不对,应该是:
char a;
scanf("%c", &a);printt("%d", a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a是int类型的,所以scanf输入时应以%d的方式接受键盘输入的值
printf里的%d说明输出形式是整型的方式
printf里的%d说明输出形式是整型的方式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
%c =char
%d =int
%ld=long int
%s=string (字符串)
%d =int
%ld=long int
%s=string (字符串)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询