| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 580 人关注过本帖
标题:有逻辑错误?
只看楼主 加入收藏
a874695162
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2014-7-21
结帖率:100%
收藏
 问题点数:0 回复次数:9 
有逻辑错误?
[
程序代码:
#include<iostream>
using namespace std;
#include<string> 
#include<cmath>
int savenum(char *,int &);
int main()
{   const int n=10;
        int num[n],num_found=0,k=0;/*num[n]用来储存找到的数字,num_foud用来记找到的数字的个数,k的功能见while循环*/
    char arry[20];
    cout<<"please input the arry";
    cin>>arry;
    char *p=&arry[0];
    while(*p!='\0')
    {
        if(‘0’<=*p<=‘9’ )
        {
        p=p+savenum(p,num[k]);//此语句目的是将p下移连续数字的位数个单位
        k++;//k在找到数字后加1,让num数组准备接收下一个找到的数字
        num_found++;
        }
        else p=p+1;//如果没找到数字,就让p下移一位,进而判断下一位是否是数字
    }
    for(int i=0;i<num_found;i++)
    cout<<num[i]<<" ";
    return 0;
}
int savenum(char *p,int &num)
{

 num=0;

 int k=0,move_p=0;

 while(‘0’<=*p<=‘9’)

 {
     num=num+(*p-48)*pow(10,k);//更改num[k]的值(这里想让(*p-48)乘以10的k次方)
       k++;//k随着p的移动增大
        move_p++;//每找到一个单个数字,主函数中的指针p应该下移一位
        p++;

 }

 return move_p;
}

习题要求:输入一个字符串,内有数字和非数字字符,如:
a123x456 179?320
将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1],运行后出现无法正常执行的错误,求各位指教!

[ 本帖最后由 a874695162 于 2014-10-24 21:21 编辑 ]
2014-10-24 20:22
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
 char *p=&arry[0];
if(‘0’<=*p<=‘9’ )
while(‘0’<=*p<=‘9’)

我想问下你这个指针是指向字符串? 然后跟字符对比?

hl928452957@gmail点com

2014-10-24 23:42
a874695162
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2014-7-21
收藏
得分:0 
回复 2 楼 stop1204
p不是指向字符串,而是字符串的首元素

加油,再加油!编程,再编程!
2014-10-25 08:40
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
回复 4 楼 a874695162
没注意
你有一个死循环
while('0'<=*p<='9')
程序代码:
    while ('0' <= *p <= '9')
    {

        num = num + (*p - 48) * pow(10, k);
        k++;//k随着p的移动增大
        move_p++;
        p++;           //无限循环时这个地址自然就出现内存访问错误
    }


[ 本帖最后由 stop1204 于 2014-10-25 18:05 编辑 ]

hl928452957@gmail点com

2014-10-25 17:56
qwe885167759
Rank: 4
等 级:业余侠客
威 望:5
帖 子:148
专家分:259
注 册:2013-3-12
收藏
得分:0 
while ('0' <= *p <= '9')
while的条件能这么写
还有是如果是运行时出现了错误,那你就看看是不是数组或指针的访问出现了越界的问题

我本楚狂人,凤歌笑孔丘
2014-10-25 22:52
a874695162
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2014-7-21
收藏
得分:0 
回复 4 楼 stop1204
请问,什么情况下会出现死循环呢?

加油,再加油!编程,再编程!
2014-10-26 12:33
哆啦安梦
Rank: 2
来 自:哈尔滨理工大学软件
等 级:论坛游民
威 望:1
帖 子:31
专家分:49
注 册:2011-10-21
收藏
得分:0 
回复 6 楼 a874695162
当循环条件一直为真的时候呗……

Press any key to continue_
2014-10-26 22:26
哆啦安梦
Rank: 2
来 自:哈尔滨理工大学软件
等 级:论坛游民
威 望:1
帖 子:31
专家分:49
注 册:2011-10-21
收藏
得分:0 
if括号里和while的括号里不能那么写……
if('0' <= *p && *p <= '9')
while('0' <= *p && *p <= '9')要这么写才对……
按照你那么写的话先从左到右算,'0'<=p算出来的结果是1或0,这两个数再做<='9'的判断,结果一定为真,所以陷入死循环

Press any key to continue_
2014-10-26 22:30
a874695162
Rank: 2
等 级:论坛游民
帖 子:37
专家分:15
注 册:2014-7-21
收藏
得分:0 
回复 8 楼 哆啦安梦
知道了,谢谢!

加油,再加油!编程,再编程!
2014-10-28 08:25
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
收藏
得分:0 
回复 9 楼 a874695162
教程应该有把这个细节说出来吧.语法什么的要注意.不然以后代码一多的时候想检查就很麻烦了

hl928452957@gmail点com

2014-10-28 17:31
快速回复:有逻辑错误?
数据加载中...
 
   



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

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