加与不加\n的结果

pp25210 2011-01-25 02:37:21
#include<stdio.h>
int main(void)
{
char i=201;
printf("%c",i);
return 0;
}
输出结果


加了‘\n’之后
...全文
307 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wopabe 2011-01-26
  • 打赏
  • 举报
回复
LZ,看不到图片
appx 2011-01-26
  • 打赏
  • 举报
回复
对于
char a = 201;
printf("%c",i);
的输出结果,不好确定,因为这个首先取决于你的环境对char型的定义,对于定义为无符号型和有符号型是完全不同的。然后就是对于这两种情况下要看环境对ASCII编码外的字符采取的处理方式,机子会对其采取随机的一种方式处理,当然这里的随机性还与系统资源的使用状况有关,至少我现在的机子就是这样。
Barbiegirl2010 2011-01-26
  • 打赏
  • 举报
回复
图片怎么看不到啊
qiunengjun 2011-01-26
  • 打赏
  • 举报
回复
图片看不到
wizard_tiger 2011-01-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 snowwhite1 的回复:]
LZ最好不要这样定义字符,对于char型而言,其表示范围为-128~127,对于unsigned char,表示范围为0~255.一般对字符进行赋值,最好在0~127之间,这样程序具有可移植性。向LZ这样赋值,需要进行转化,并且0~127之外的字符各国并不是完全相同的,经常会出问题。
如果确实要赋值,最好类型改为unsigned char。
[/Quote]
要是赋值的话,这个说的很清楚了。
楼主,图片看不到。
AnYidan 2011-01-26
  • 打赏
  • 举报
回复
ansi c 中规定用的为缺省字符集合是ASCII再加上EOF,下标值从0到127,当仅用字符集合时:

指针 = 缺省字符集合指针 + 1
mtj520 2011-01-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bokutake 的回复:]
如果在纯DOS下,128-255里会有很多有的字符,各种欧洲语言的特殊字母、制表符和一些深浅方框以及数学符号等等。不过问题在于这部分字符和不同的代码页有密切关系,中国用的是和美国一样的Latin-1,但是瑞士、日本等国家就完全不同了。
[/Quote]
+1
辰岡墨竹 2011-01-25
  • 打赏
  • 举报
回复
如果在纯DOS下,128-255里会有很多有的字符,各种欧洲语言的特殊字母、制表符和一些深浅方框以及数学符号等等。不过问题在于这部分字符和不同的代码页有密切关系,中国用的是和美国一样的Latin-1,但是瑞士、日本等国家就完全不同了。
辰岡墨竹 2011-01-25
  • 打赏
  • 举报
回复
是这样的,在中文GBK字符集里,汉字可以有两个字节表示。高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE。比较新的GB18030(现在一般系统都支持),汉字可以有1、2或4个字节。其中双字节和GBK都是相同的。在Windows环境下,一般的代码页(CP936)都没有128~255的字符,会打印问号或者方框代替。但是如果你连续输出的话,因为第二个字节不是回车符,所以可能有的正好组成一个双字节GBK编码,系统就按GBK来解释,于是会显示一堆乱码。
char具体范围因编译器不同而不同,VC是unsigned的。
风中追梦郎 2011-01-25
  • 打赏
  • 举报
回复
图片没有看到哦。
fresh_han 2011-01-25
  • 打赏
  • 举报
回复
楼上有说啊 char的取值范围才是-128~127 如果你取值大于127 就有溢出,应该就是另一个负值了,所以输出肯定不会是你想的了。128赋值给char型的应该就是-128,129就是-1。。。。

[Quote=引用 7 楼 qq252101792 的回复:]
引用楼主 qq252101792 的回复:
#include<stdio.h>
int main(void)
{
char i=201;
printf("%c\n",i);
return 0;
}
输出结果


加了‘\n’之后

我刚刚又调试了下,出现了以下2种情况,还望大家解惑:
1.当给 i 赋大于128的值时输出的全是 ?
2.当printf()语句改为pri……
[/Quote]
pp25210 2011-01-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 qq252101792 的回复:]
#include<stdio.h>
int main(void)
{
char i=201;
printf("%c\n",i);
return 0;
}
输出结果


加了‘\n’之后
[/Quote]
我刚刚又调试了下,出现了以下2种情况,还望大家解惑:
1.当给 i 赋大于128的值时输出的全是 ?
2.当printf()语句改为printf("%c",i); i 值大于128是输出的全是垃圾值。
flysnowhite 2011-01-25
  • 打赏
  • 举报
回复
LZ最好不要这样定义字符,对于char型而言,其表示范围为-128~127,对于unsigned char,表示范围为0~255.一般对字符进行赋值,最好在0~127之间,这样程序具有可移植性。向LZ这样赋值,需要进行转化,并且0~127之外的字符各国并不是完全相同的,经常会出问题。
如果确实要赋值,最好类型改为unsigned char。
kevinxin24 2011-01-25
  • 打赏
  • 举报
回复
201是不可见字符
greyillusion 2011-01-25
  • 打赏
  • 举报
回复
201是个什么字符啊
漫步者、 2011-01-25
  • 打赏
  • 举报
回复
\n会被放入输入队列中。
LZ,你的图片看不到。
justkk 2011-01-25
  • 打赏
  • 举报
回复
ASCII码201本身就不是一个可见字符
如果没有\n,那么这个字符与命令行提示符连在一起,可能显示一个随机的汉子
如果\n,这个字符本身是不可见的
bdmh 2011-01-25
  • 打赏
  • 举报
回复
看不到图片,'\n'就是换行符

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧