也是在看李春葆的c++习题集发现的一个小程序,想到了点问题,下面贴出代码:
#include <iostream>
using namespace std;
void trans(int,int);
int main()
{
int n;
int base;
cout<<"请输入一个带转换的数字:"<<endl;
cin>>n;
cout<<"待转化的进制数"<<endl;
cin>>base;
switch(base)
{
case 2:trans(n,2);break;
case 8:trans(n,8);break;
case 16:trans(n,16);break;
case 32:trans(n,32);break;
case 0:break;
default :cout<<"输入的进制数只能为2,8,16,32,请检查是否输入正确!"<<endl;
}
return 0;
}
void trans(int n,int base)
{
int num[20];
int count=0;
do{
count++;
num[count]=n%base;
n=n/base;
}while(n!=0);
for(int i=count;i>=1;i--)
{
if(num[i]<10)
cout<<num[i];
else<pre name="code" class="cpp">
cout<<char(num[i]+'A'-10); }}
就是一个普通的进制转换的小程序,其实就是数组的大小那块儿,如果动态的分配大小也可以,但是我想的是能不能在数组大小不够的时候,能不能像java那样把这个异常捕获下来。也就是在count用完20大小的num[]数组后,能够抛出。
================================================》》》》java版捕获异常
package cn.stu.hooko;
import java.util.Scanner;
public class trans {
public static void main(String[] args) {
int n;
int base;
System.out.println("请输入待转化的数字:");
Scanner temp = new Scanner(System.in);
n = temp.nextInt();
base = temp.nextInt();
switch(base)
{
case 2:tran(n,2);break;
case 8:tran(n,8);break;
case 16:tran(n,16);break;
case 32:tran(n,32);break;
case 0:break;
default: System.out.println("输入的进制数只能为2,8,16,32,请检查是否输入正确!");
}
}
private static void tran(int n, int i) {
int[] num = new int[20];
int count=0;
try{
do{
count++;
num[count]=n%i;
n=n/i;
}while(n!=0);
for(int j=count;j>=1;j--)
{
if(num[j]<10)
//cout<<num[j];
System.out.print(num[j]);
else
//cout<<char(num[i]+'A'-10);
System.out.print(num[j+'A'-10]);
}
}catch(ArrayIndexOutOfBoundsException e){ //捕获的系统异常,对于自定义异常的捕获有待下一步学习
System.out.println("位数(数组大小)超过了20!!");
System.out.println("下标: " + e.getMessage());
}
}
}