| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 855 人关注过本帖
标题:C程序编程问题
只看楼主 加入收藏
Vsee
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-1-24
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:10 
C程序编程问题
1    #include <stdio.h>
2    void main()
3    {
4     char *s="\ta\018bc";
5     for(;*s!='\0';s++)
6    {
7       printf("*");
8     }
9    }
结果输出******

为什么,怎么char *s="\ta\018bc";这是6个字符吗?哪6个???
我把7  改为printf("%c\n",s);
输出的是
  空格一行
  
  "
  #
  然后是S中间一竖
  %
为什么啊,我又把7改为
printf("%s\n",s);
输出的图像我打不出来



这到底怎么回事?



搜索更多相关主题的帖子: include 
2011-01-25 19:08
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
收藏
得分:7 
你多琢磨几次.能想明白的...
2011-01-25 19:13
Vsee
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-1-24
收藏
得分:0 
回复 2楼 刘定邦
我真的想了好久了,想通了也不会来这啊、、、、、、
2011-01-25 20:24
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:7 
把第7行改成
printf("%c\n",*s);
就可以看出来了。
注意到s是地址(指针),*s才是内容

********多贴代码,少说空话*******
2011-01-25 20:31
Vsee
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-1-24
收藏
得分:0 
回复 4楼 ppfly
  大侠  我改了,可是我不懂   为啥 输出的是那样?
"\t    这输出的我懂
 a     这也懂
\01    这个就不懂了   输出的是那么个图像,还有几就是为啥不和\018一起输出一个,而是\01一个  8却单独一个
8
 b
 c
2011-01-25 20:59
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:7 
1    #include <stdio.h>
2    void main()
3    {
4     char *s="\ta\018bc";
5     for(;*s!='\0';s++)
6    {
7       printf("*");
8     }
9    }
结果输出******

为什么,怎么char *s="\ta\018bc";这是6个字符吗?哪6个???
"\t¥a¥\01¥8¥b¥c"我用¥符号把6个字符隔开了。
问题的关键是\018的解释:
C语言编译软件在处理常量时,遵循“最大化”原则,即:尽可能多的,将可以正确的内容,整合成一个量。
由于/01是字符常量的八进制形式,而8已经不再是八进制了,所以自然而然就成了前面的八进制常量的结束和另一个新字符'8'的开始。
明白了么?

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-01-25 21:07
Vsee
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-1-24
收藏
得分:0 
回复 6楼 犬虫门心
     懂 了    谢谢   非常感谢
2011-01-25 21:10
Vsee
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-1-24
收藏
得分:0 
回复 6楼 犬虫门心
  既然是字符的8进制,那我用

int main()
{
  char  a='\01';
  printf("%d\n",a);
}  
为啥得到的不是原来输出那个符号的ASCLL值啊  而是1
2011-01-25 21:31
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:0 
以下是引用Vsee在2011-1-25 21:31:25的发言:

  既然是字符的8进制,那我用

int main()
{
  char  a='\01';
  printf("%d\n",a);
}  
为啥得到的不是原来输出那个符号的ASCLL值啊  而是1
得到的就是原来输出那个符号的ASCLL值,因为原来的字符并不是‘1’,而是ASCLL为1 的字符。
将printf语句改为printf("%c\t%d\n",a,a);可以验证

********多贴代码,少说空话*******
2011-01-25 22:15
Vsee
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2011-1-24
收藏
得分:0 
回复 9楼 ppfly
   谢谢各位   非常感谢!
2011-01-26 14:22
快速回复:C程序编程问题
数据加载中...
 
   



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

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