| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:疑似指针问题,请高手进来帮帮忙,我又晕了
只看楼主 加入收藏
song3891
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
疑似指针问题,请高手进来帮帮忙,我又晕了
在十万内选出有四和六的数字
void main()
{
    int a,c=0,i;
    char *p,*sam,sa[7]="46",m;
    p=new char(7);                       
    for (a=1001;a<99999;a++)
    {
        c=0;
        itoa(a,p,10);
        for (i=0;i<5;i++)
        {   
            p+=i;
            m=*p;          //刚有高手指导改正了一下,可是还是不明白,p+=i;m=*p 这两句改成 m=*(p+i) 不是一个意思吗 为什么分开就出错呢?
            sam=sa;
            while(*sam!='\0')
            {
                if(*sam==m)
                {
                    c++;
                    printf("%8d",a);
                    break;
                }
                sam++;
            }
            if(c>0)break;
        }   
    }
}

[ 本帖最后由 song3891 于 2009-10-7 19:01 编辑 ]
搜索更多相关主题的帖子: 指针 
2009-10-07 16:56
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
for (a=1001;a<99999;a++)
    {
        c=0;
        itoa(a,p,10); /* 这里每次循环都用到p,p的指向不能改动 */
        for (i=0;i<5;i++)
        {   
            p+=i;
            m=*p;    /* 这里改:m=*(p+i); */     
            sam=sa;
            while(*sam!='\0')
            {
                if(*sam==m) /* 你这是整数里包含4,或有包含6就输出吧,如果4和6都要包含那算法就不对了*/
                {
                    c++;
                    printf("%8d",a);
                    break;
                }
                sam++;
            }
            if(c>0)break;
        }
        p=p-i;     /* 这改到了p的指向,把它去掉不要 */
    }

努力—前进—变老—退休—入土
2009-10-07 17:43
song3891
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-4
收藏
得分:0 
谢谢 UserYuH 帮我解决问题,不过解决了一个又出来一个能帮我再说一下上面的问题吗?
2009-10-07 19:03
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:0 
你遇到什么问题?
你的程序如碰到 6666,就会输出四个6666,是这个问题吗?
还是4和6都包含的问题?
要是上面两个问题可以加进些判断语句,自己先想下哈!

努力—前进—变老—退休—入土
2009-10-07 19:22
song3891
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-4
收藏
得分:0 
p+=i;m=*p 这两句改成 m=*(p+i) 不是一个意思吗 为什么分开就出错呢?
2009-10-07 19:25
song3891
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-4
收藏
得分:0 
我试了 遇到66666也是输出一个 就是上面的问题没明白 这指针真把我能晕了
2009-10-07 19:29
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:18 
p+=i;这语句把p的指向改动了,原p是指向一个空间的首地址,你改动了p的指向,向后移了i位,循环没几次,你的p指向可能就指向空间以外的地址,这时再用itoa(a,p,10);就会出错。
m=*(p+i);这是没改动p的指向的。

努力—前进—变老—退休—入土
2009-10-07 19:38
viky2003
Rank: 5Rank: 5
等 级:职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
收藏
得分:2 
好像用库函数比较简单:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  char symbol[3]="46";
  char string[6];
  char *find = NULL;
  int index = 0;
  int i = 0;
 
  for(index = 1001;index < 99999; index ++)
  {
            find = NULL;
            memset(string,'\0',6);
            _itoa(index,string,10);
            if((find = strpbrk(string,symbol))!= NULL)
            {
                     printf("%d ",index);
                     i++;
                     if(i%20 == 0)
                     printf("\n");
                     continue;
            }
            
  }
  system("PAUSE");   
  return 0;
}



要练习算法就来http:///!!有挑战哦!!
2009-10-07 19:45
song3891
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-10-4
收藏
得分:0 
谢谢 UserYuH 终于能明白了
2009-10-07 19:56
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
p+=i;m=*p 这两句改成 m=*(p+i) 不是一个意思吗 为什么分开就出错呢?
那个,前一种写法,pd的值改了,后面只在第一次是能给m正确复制
2009-10-08 04:29
快速回复:疑似指针问题,请高手进来帮帮忙,我又晕了
数据加载中...
 
   



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

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