首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

选择1(或2、3)后出现异常不知道为什么?

2012-06-24 
选择1(或2、3)后出现错误不知道为什么???/**要求:设计一个数进制的转换1:十进制转二进制;2:十进制转八进制;

选择1(或2、3)后出现错误不知道为什么???
/**
要求:设计一个数进制的转换
1:十进制转二进制;  
2:十进制转八进制;
3:十进制转十六进制;
4:退出;
*/
#include<iostream>
/*#include<stdio.h>
#include<stdlib.h>
#include<string>
#define OK 1
#define ERROR 0
*/
#define MAXSIZE 100
using namespace std;
void zhuanhuan(int);//函数声明
//int a[MAXSIZE];
typedef struct zhuan
{
int *base;
int *top;
int stacksize;
}zhuan;
zhuan s;
void ChuShiHua(zhuan s)
{
s.base =new int[MAXSIZE];
s.top=s.base;
s.stacksize=MAXSIZE;
}

int main()
{
ChuShiHua(s);
int m,//需要的命令数字
i=1;//循环变量
while(i)
{
cout<<"请输入1~4的数;\n 1为十进制转二进制;\n 2为十进制转八进制;\n 3为十进制转十六进制;\n 4为退出;\n";
cin>>m;
switch(m)
{
case 1: zhuanhuan(2);break;
case 2: zhuanhuan(8);break;
case 3: zhuanhuan(16);break;
case 4: return 0;
default: cout<<"输入有误请重新输入!!!";
}
}
}
void zhuanhuan(int n)
{
cout<<"请输入要转换的十进制数";
int m,j=0;
cin>>m;
while(m)
{
*(s.top++)=m%n;
m/=n;
}
while((--s.top)>=s.base)
cout<<*s.top;
cout<<'\n';
}


[解决办法]

C/C++ code
/**要求:设计一个数进制的转换1:十进制转二进制;   2:十进制转八进制;3:十进制转十六进制;4:退出;*/#include<iostream>/*#include<stdio.h>#include<stdlib.h>#include<string>#define OK 1#define ERROR 0*/#define MAXSIZE 100using namespace std;void zhuanhuan(int);//函数声明//int a[MAXSIZE];typedef struct zhuan{int *base;int *top;int stacksize;}zhuan;zhuan s;void ChuShiHua(zhuan& s)//这里改为了传引用,不传引用的话只是s的一个副本初始化,退出函数后副本{                           //被销毁,也就是说你的全局变量s没有被初始化s.base =new int[MAXSIZE];s.top=s.base;s.stacksize=MAXSIZE;}int main(){ChuShiHua(s);int m,//需要的命令数字i=1;//循环变量while(i){cout<<"请输入1~4的数;\n 1为十进制转二进制;\n 2为十进制转八进制;\n 3为十进制转十六进制;\n 4为退出;\n";cin>>m;switch(m){case 1: zhuanhuan(2);break;case 2: zhuanhuan(8);break;case 3: zhuanhuan(16);break;case 4: return 0;default: cout<<"输入有误请重新输入!!!";}}}void zhuanhuan(int n){cout<<"请输入要转换的十进制数";int m,j=0;cin>>m;while(m){*(s.top++)=m%n;m/=n;}while((--s.top)>=s.base)cout<<*s.top;cout<<'\n';}
[解决办法]
楼上说得不错,另外补充一点,如果程序转换一次之后,在运行会出错,top的指针乱了,如下改正
C/C++ code
/**要求:设计一个数进制的转换1:十进制转二进制;   2:十进制转八进制;3:十进制转十六进制;4:退出;*/#include<iostream>/*#include<stdio.h>#include<stdlib.h>#include<string>#define OK 1#define ERROR 0*/#define MAXSIZE 100using namespace std;void zhuanhuan(int);//函数声明//int a[MAXSIZE];typedef struct zhuan{int *base;int *top;int stacksize;}zhuan;zhuan s;void ChuShiHua(zhuan& s)//这里改为了传引用,不传引用的话只是s的一个副本初始化,退出函数后副本{                           //被销毁,也就是说你的全局变量s没有被初始化s.base =new int[MAXSIZE];s.top=s.base;s.stacksize=MAXSIZE;}int main(){ChuShiHua(s);int m,//需要的命令数字i=1;//循环变量while(i){cout<<"请输入1~4的数;\n 1为十进制转二进制;\n 2为十进制转八进制;\n 3为十进制转十六进制;\n 4为退出;\n";cin>>m;switch(m){case 1: zhuanhuan(2);break;case 2: zhuanhuan(8);break;case 3: zhuanhuan(16);break;case 4: return 0;default: cout<<"输入有误请重新输入!!!";}}}void zhuanhuan(int n){cout<<"请输入要转换的十进制数";int m,j=0;cin>>m;while(m){*s.top++=m%n;//这里去掉括号m/=n;}while((--s.top)>=s.base)cout<<*s.top;s.top++;//输出完之后top归位cout<<'\n';} 

热点排行
Bad Request.