免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1859 | 回复: 7
打印 上一主题 下一主题

想把整数用整数数组表示,但是不成功,贴上代码,请指点指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-11 23:25 |只看该作者 |倒序浏览
做的是书上的c++类的习题,把一个整数放入整数数组,
代码如下,编译通过,

如果main函数内,BigInt testbi(2345678),
那么运行正常,结果不是期望的:后面跟了一大串数字,这是怎么回事啊
这是我电脑上的显示:
I:\clang\class>bigint2
0
8-7-6-5-4-3-2-4198887-1-205920-207736-4468736-2359204--1-2359208-1-6-207736-

如果把main函数内,BigInt testbi(2345678),增加一位,如 12345678,或者23456789,编译正常,但是运行时跳出异常。

还有一个问题是成员函数void BigInt::printBint()  const,想把整数数组打印出来,但是while 的条件不好定,现在这样用bi[i],但是如果正好整数数组的这个元素为0,打印程序就不往下打了。而且 sizeof(bi) 返回为0,不好确定数组长度,我想不出怎么确定while循环的条件。给我出点主意啊





#include <iostream>
using std::cout;


class BigInt
{
      public:
        BigInt(unsigned int);
        void setBint(unsigned int aa);
        
        void printBint()  const ;      
      private:
        int bi[];
        //int si[];
               
} ;

BigInt::BigInt(unsigned int a)
{
   setBint(a);      
}

void BigInt::setBint(unsigned int aa)
{
      int i=0;
      while (aa!=0)
      {
            bi[i]=aa%10;
            aa/=10;
            i++ ;
            }
           
}

void BigInt::printBint()  const
{
     int i=0;
    cout<<sizeof(bi)<<"\n";
   
     while (bi[i])
       {
            
           cout<<bi[i]<<"-";
           i++ ;
           
       }
}
   
int main()
{
    BigInt testbi(2345678);
    testbi.printBint();
    return 0;
}

[[i] 本帖最后由 i802 于 2007-4-11 23:35 编辑 [/i]]

论坛徽章:
0
2 [报告]
发表于 2007-04-11 23:31 |只看该作者
请禁用 Smilies 和 Discuz! 代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2007-04-11 23:44 |只看该作者
可以在类中int bi[];吗?
我怎么感觉不行呢。

论坛徽章:
0
4 [报告]
发表于 2007-04-11 23:47 |只看该作者

  1. #include <iostream>
  2. using std::cout;


  3. class BigInt
  4. {
  5.       public:
  6.         BigInt(unsigned int);
  7.         void setBint(unsigned int aa);
  8.         
  9.         void printBint()  const ;      
  10.       private:
  11.         int bi[32];
  12.         //int si[];
  13.                
  14. } ;

  15. BigInt::BigInt(unsigned int a)
  16. {
  17.   int i =0;
  18.   while(i<32) {
  19.     bi[i] = 0;
  20.     i++;
  21.   }
  22.   setBint(a);      
  23. }

  24. void BigInt::setBint(unsigned int aa)
  25. {
  26.   int i=0;
  27.   while (aa!=0)
  28.   {
  29.     bi[i]=aa%10;
  30.     aa/=10;
  31.     i++ ;
  32.   }
  33.            
  34. }

  35. void BigInt::printBint()  const
  36. {
  37.   int i=0;
  38.   cout<<sizeof(bi)<<"\n";

  39.   while (i<32)
  40.   {
  41.     cout<<bi[i]<<"-";
  42.     i++;
  43.   }
  44.   cout<<std::endl;
  45. }

  46.    
  47. int main()
  48. {
  49.   BigInt testbi(2345678);
  50.   testbi.printBint();
  51.   return 0;
  52. }
复制代码

[ 本帖最后由 kangji 于 2007-4-11 23:49 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-04-11 23:47 |只看该作者
应该可以用数组阿,
不然肯定编译都通不过。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-04-11 23:48 |只看该作者
原帖由 i802 于 2007-4-11 23:47 发表
应该可以用数组阿,
不然肯定编译都通不过。

编译通过能证明你程序正确吗?

论坛徽章:
0
7 [报告]
发表于 2007-04-11 23:53 |只看该作者
程序不正确这个我知道,
所以拿出来请大家指点。

论坛徽章:
0
8 [报告]
发表于 2007-04-12 00:02 |只看该作者
int bi[]并没有为bi分配空间,像程序中的BigInt对象是在栈上分配的,bi引用的是栈上的空间,比如12345678出现异常是因为覆盖了函数的返回地址。在C程序中可以使用int bi[],
是因为程序中手动分配了空间。编译器并不会为未定义大小的数组分配空间的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP