| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 439 人关注过本帖
标题:一个C程序求解释?哥哥姐姐们帮帮我、
只看楼主 加入收藏
方一鸣
Rank: 2
等 级:论坛游民
帖 子:74
专家分:13
注 册:2011-8-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
一个C程序求解释?哥哥姐姐们帮帮我、
#include<stdio.h>
main()
{
char s[]="0123xy\08s34f4w2";
int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>'0'&&s[i]<='9')n++;
printf("%d\n",n);

}
程序运行的结果是?

我分析的是i=0  s[i]=0; 不符合s[i]!=0 所以就直接跳出循环   N=0  但是答案为什么事 n=3 呀。  求解求解!
搜索更多相关主题的帖子: 哥哥 哥哥 
2011-08-31 16:04
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
收藏
得分:5 
i=0的时候,s[i]='0'而不是s[i]=0

学C的秘诀=每天都来泡论坛
2011-08-31 16:10
chenxin20104
Rank: 2
等 级:论坛游民
帖 子:1
专家分:10
注 册:2011-8-31
收藏
得分:10 
i=0时s[i]=‘0’,也就是说这时&s[i]这个地址里存放的数字是0的ASCLL码值48,而s[i]!=0这个语句实际上比较的是ASCLL码值,比如说上面的s[0]!=0实际比较过程为48!=0,所以不会跳出循环,而比较到0123xy\08s34f4w2中\0的时候,因为\0的ASCLL码值为0,此时跳出循环,得到的大于0小于9的数的个数就为123这三个数,即n=3.
2011-08-31 16:18
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:5 
i=0的时候,s[i]='0'而不是s[i]=0
当i=4时,因为x>'9'很多,跳出循环执行,n自加了三次,故n=3
2011-08-31 16:18
菜鸟7号
Rank: 2
等 级:论坛游民
帖 子:21
专家分:17
注 册:2011-8-29
收藏
得分:0 
3楼正解吧
2011-08-31 16:28
无悔爱白修
Rank: 2
等 级:论坛游民
帖 子:28
专家分:27
注 册:2010-3-24
收藏
得分:0 
3楼,说的很详细了!
2011-08-31 16:42
hanxiaokun
Rank: 2
等 级:论坛游民
帖 子:44
专家分:56
注 册:2011-8-31
收藏
得分:0 
#include<stdio.h>
main()
{
char s[]="0123xy\08s34f4w2";
int i,n=0;
for(i=0;s[i]!=0;i++)
if(s[i]>'0'&&s[i]<='9')n++;
printf("%d\n",n);

}
首先,你定义的是字符型数组,数组元素为字符,在运算中字符是以ASICII的值进行的,所以s[0] = '0',而不等于0.
答案是3是这样的:首先判断条件使s[0]不满足s[i]>'0'&&s[i]<='9',s[1]~s[3]满足条件使此时n=3;
下面的'\0'是一体的,在字符串数组中'\0',表示次数组或字符串结束,所以‘\0'以后的内容都是无效的,
所以结果为3
希望对你能明白!

[ 本帖最后由 hanxiaokun 于 2011-8-31 16:59 编辑 ]
2011-08-31 16:57
快速回复:一个C程序求解释?哥哥姐姐们帮帮我、
数据加载中...
 
   



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

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