| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 544 人关注过本帖
标题:这个程序为什么不是死循环
只看楼主 加入收藏
xilixjd
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2015-12-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
这个程序为什么不是死循环
程序代码:
#include <stdio.h>

void delspace(char *p1);

int main(void)
{
    char str[81];

 do

 {
  puts("input a string:");
  gets(str);
  delspace(str);
  puts(str);
  puts("input any char except q to go on.");
  gets(str);

 }

 while(*str != 'q');

 puts("Quit.");
    return 0;
}

void delspace(char *p1)
{

 char *p2;

 while (*p1 != '\0' )

 {
  if (*p1 == ' ')
  {
   p2 = p1;
   while(*p2 != '\0')
   {
    *p2 = *(p2+1);
    p2++;
   }
    p1--;//这里是多余的吧,删掉可以运行,不删的话感觉陷入了死循环。 
  }
  p1++;

 }
}
程序是要输入一个字符串,若有空格就把它删掉。
2015-12-06 11:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
你的 while(*str != 'q'); 写着玩的?
2015-12-06 11:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
不会陷入死循环,因为p1--只发生在检测到空格时执行。不过这一句是有点画蛇添足,楼主可能考虑了最后一个字符是空格的情况,但即使这样,由于接连2个都是字符串结束符'\0',不会让指针溢出的,如果函数代码按下述代码设计,我觉得更直观:
程序代码:
void delspace(char *p1)
{
    char *p2;
    for(p2=p1;*p1;p1++)
    {
        *p2=*p1;
        if(*p1!=' ')p2++;
    }
    *p2=*p1;
}

能编个毛线衣吗?
2015-12-06 12:01
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 2楼 rjsp
经我vs2010验证:输入字符q可以退出循环,多一个gets(str);没必要

能编个毛线衣吗?
2015-12-06 12:04
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
那句不是多余的,如果字符串里有多个连续的空格,删除那句,就会得到不正确的结果。
三楼代码一个循环就搞定了。可以学习一下。
2015-12-06 12:26
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 5楼 newdos

能编个毛线衣吗?
2015-12-06 12:35
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
回复 6楼 wmf2014
但是,版主MM,没有考虑如果字符串前面有空格的的问题,你的代码会出现错误。

比如“ _test  _  ”_前面还有空格的的情况。
2015-12-06 12:39
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 7楼 newdos
没发现啊,见下图:
图片附件: 游客没有浏览图片的权限,请 登录注册


还望指教!

能编个毛线衣吗?
2015-12-06 12:51
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
回复 8楼 wmf2014
没有错误,搞错了。
2015-12-06 12:55
xilixjd
Rank: 1
等 级:新手上路
帖 子:11
专家分:9
注 册:2015-12-6
收藏
得分:0 
回复 3楼 wmf2014
好的好的,受教了
2015-12-06 14:05
快速回复:这个程序为什么不是死循环
数据加载中...
 
   



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

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