| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 303 人关注过本帖
标题:为什么同样是判断条件,结果却不相同
只看楼主 加入收藏
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
  问题点数:0  回复次数:8   
为什么同样是判断条件,结果却不相同
程序代码:
#include<stdio.h>
int main()
{
    char buf[]="                312313131";
//    puts(buf);

    int count = 0;

    for(int i=0;buf[i];i++) //判断空格数
    {
        if(buf[i] == ' ')
            count += 1;
    }
    printf("%d\n",count);
int q = 0;
    for(q=count;buf[q];q++) //删除空格
    {
        buf[q-count]=buf[q];
        /*if(buf[q] == 0) // 结束符
        {
            break;
        }   
*/
    }
    printf("\nq=%d\n",q);
    printf("%s",buf);

    return 0 ;
}

这个是楼主写的代码,然后发现了问题。  在 删除空格的函数里面
程序代码:
    for(q=count;buf[q];q++) //删除空格
    {
        buf[q-count]=buf[q];
        
    }
  这个结果是错误的, 我不知道为什么
程序代码:
    for(q=count;;q++) //删除空格
    {
        buf[q-count]=buf[q];
        if(buf[q] == 0) // 结束符
        {
            break;
        }   
    }
  这个是正确的  
我感觉这两个判断条件是一样的啊? 为什么第一个会出错呢  
2018-08-14 12:11
自学的数学
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:603
专家分:2418
注 册:2017-11-15
  得分:0 
从语法角度来说,都没错,只是运行效果不一样。还有就是看看你用的是什么编译器。俺使用的是DEV,你呢?
2018-08-14 13:56
尘安
Rank: 2
等 级:论坛游民
威 望:1
帖 子:18
专家分:45
注 册:2018-8-9
  得分:0 
for(q=count;buf[q];q++) //删除空格
    {
        buf[q-count]=buf[q];
        
    }
这段代码是先执行判断 buf[q];,再去执行后面的语句。当遍历到结束符时就结束循环。

而下面这段
for(q=count;;q++) //删除空格
    {
        buf[q-count]=buf[q];
        if(buf[q] == 0) // 结束符
        {
            break;
        }   
    }
是先执行buf[q-count]=buf[q];,再去执行判断,当遍历到结束符时,已经把结束符赋给了前面。
所以运行的结果不同
2018-08-14 14:20
kfyniriu
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:97
专家分:357
注 册:2018-7-6
  得分:0 
结果不一样是因为有没有添加结束符'\0'

第一个代码:
  for(q=count;buf[q];q++) //删除空格
    {
        buf[q-count]=buf[q];
        
    }
buf[q-count]='\0';  //添加这个,就正确了

第二个代码:
for(q=count;;q++) //删除空格
    {
        buf[q-count]=buf[q];
        if(buf[q] == 0) // 结束符
        {
            break;
        }   
    }
循环没有结束条件,,当循环到结束符赋予了之后,if语句起作用,结束循环

2018-08-14 20:03
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
  得分:0 
回复 2楼 自学的数学
我是VS2008   用for 条件判断的话 结果是错误的
2018-08-14 20:26
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
  得分:0 
回复 4楼 kfyniriu
懂啦 谢谢啦   不过以后遍历字符串  在for里面加入判断条件  还是在for里面单独用if判断?
2018-08-14 20:30
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
  得分:0 
回复 3楼 尘安
是因为没有赋值结束符吧   
2018-08-14 20:31
尘安
Rank: 2
等 级:论坛游民
威 望:1
帖 子:18
专家分:45
注 册:2018-8-9
  得分:0 
回复 6楼 a15022606145
emmm 我说的有问题吗
2018-08-15 09:26
kfyniriu
Rank: 5Rank: 5
等 级:职业侠客
威 望:7
帖 子:97
专家分:357
注 册:2018-7-6
  得分:0 
回复 6楼 a15022606145
个人习惯是for语句后,添加结束符。

原因是:只要循环达到目的就停止,不再考虑别的因素。

这个只是个人使用的习惯,仅供参考
2018-08-15 10:40







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

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