标题:关于超过127字符输出的问题,请教啦,谢谢:)
只看楼主
lxj_1982
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-6
结帖率:100%
已结贴  问题点数:20 回复次数:6 
关于超过127字符输出的问题,请教啦,谢谢:)
谭浩强写的《C程序设计》第四版的第48页中是这样写的:
char c='?'
c是一个字符变量,实质上是一个字节的整型变量,由于它常用来存放字符,所以被称为字符变量,可以把0~127之间的整数赋给一个字符变量。
程序如下:
int main()
{
  char c1,c2;
  c1=97;
  c2=98;
 printf("c1=%d,c2=%d\n",c1,c2);
 printf("c1=%c,c2=%c\n",c1,c2);
 return 0;
}
输出的结果是:
c1=97,c2=98
c1=a,c2=b
如果把程序中修改为:
int main()
{
  char c1,c2;
  c1=128;
  c2=129;

 printf("c1=%d,c2=%d\n",c1,c2);
printf("c1=%c,c2=%c\n",c1,c2);
 return 0;
}
c1=128按照字符可以输出对应ASCII的符号,但是c2按照字符输出则是一个“?”,这是为什么呢?128和129都超出127了啊;
请大侠们指点,谢谢

搜索更多相关主题的帖子: C程序设计 return color 
2013-11-06 22:05
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:8 
超过127的一般来说都是双字节字符了  比如汉字啥的   其处理手法不能像char那样处理了

DO IT YOURSELF !
2013-11-06 22:20
lxj_1982
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-6
得分:0 
嗯,我想不通的就是为什么128可以输出,而129以后的就是“?”了呢,百思不得其解,呵呵;
我用的是Visual C++ 6.0的编译系统,我自己的计算机是:Intel(R) Core(TM);64位的操作系统
2013-11-06 22:41
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
看来2楼的话是白说了
 
双字节字符 是需要2个连着的字符(单字节)一起输出 才能输出一个完整的双字节字符 比如 一个汉字

而你非要拆开来输出  那一定是乱码  (比如你所说的?就是其中一种)

DO IT YOURSELF !
2013-11-06 22:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:8 
全是似是而非的说法,说它错嘛,太过认真;说它对嘛,又太违心。

只回答你提的那个问题吧,输出什么,只取决于平台使用的代码页。
2013-11-07 09:23
离水的鱼
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2013-11-7
得分:4 
字符类型取值范围为-128~127.所以当以%d形式输出时是-128与-127,因为其已经超出了char的范围。而从128到255是ASCII扩展字符,有多种实现,具体输出取决于你的操作系统上的运行库。
2013-11-07 10:40
lxj_1982
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-11-6
得分:0 
哦,多谢各位大侠了,也就是说超出0~127,输出就是不确定的情况了,不能按照单个字节在计算机中以补码形式存放的思路来看了,对吧。
2013-11-07 10:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-423165-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.521554 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved