关于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;
展开
 我来答
kaixingui2012
2012-11-18 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6193万
展开全部
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);按整型输出时,就能看到你想得到的数值了。
waveletzh
2012-11-18 · TA获得超过1460个赞
知道答主
回答量:75
采纳率:0%
帮助的人:65.3万
展开全部
这得从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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
r1renhw
2012-11-18 · TA获得超过1577个赞
知道小有建树答主
回答量:810
采纳率:100%
帮助的人:414万
展开全部
a是int类型的,所以scanf输入时应以%d的方式接受键盘输入的值
printf里的%d说明输出形式是整型的方式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1107942585
2012-11-18
知道答主
回答量:44
采纳率:0%
帮助的人:14.7万
展开全部
%c =char
%d =int
%ld=long int
%s=string (字符串)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吕功建wd
2012-11-18
知道答主
回答量:36
采纳率:0%
帮助的人:7.2万
展开全部
内存中是以2进制存的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
13...0@qq.com
2012-11-18
知道答主
回答量:13
采纳率:0%
帮助的人:2万
展开全部
阿苏大
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式