回复 8楼 wp231957
程序貌似没有错误,就是那错误检测太蛋疼了,输入也有点蛋疼~~~
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):0.3,16
输入错误,请检查
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):h,
输入错误,请检查
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):好,565
输入错误,请检查
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):16,20
输入错误,请检查
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):蛋疼,16
输入错误,请检查
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):66,16
------------10进制的 66 等于 16 进制的42
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):
*45,10
输入错误,请检查
请分别输入2个十进制数,顺序为待转换数,待转换进制数
中间用逗号分开,例如 555,8---->(输-1退出程序):-1
Press any key to continue
我的缺陷代码:
/*程序主要功能:输入一个十进数,将其转换成 N 进制数(0<N<=16)*/
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<malloc.h>
typedef char DataType;
#define STACK_SIZE 100
typedef struct{
DataType *top;
DataType *base;
int stack_size;
}seqstack;
void init(seqstack *s)//创建空栈
{
s->base=(DataType *)malloc(STACK_SIZE*sizeof(DataType));
if(!s->base) exit(-1);
s->top=s->base;
s->stack_size=STACK_SIZE;
}
int IsEmpty(seqstack *s)//判断栈是否为空
{
return s->base==s->top;
}
int IsFull(seqstack *s)//判断栈是否已满
{
return s->top-s->base==STACK_SIZE-1;
}
void Push(seqstack *s,char ch)//进栈
{
if(IsFull(s))
{
printf("overflow\n!");
exit(1);
}
else
*s->top++=ch;
}
char Pop(seqstack *s)//出栈
{
if(IsEmpty(s))
{
printf("栈空\n");
exit(1);
}
return *--s->top;
}
char Top(seqstack *s)// 取栈顶元素
{
if(IsEmpty(s))
{
printf("栈空\n");
exit(1);
}
return *(s->top-1);
}
void TenDownConversion(long a,int b)//函数功能:1~16进制的转换
{
int i;
seqstack s;
init(&s);
while(a)//当a本身即为0时没有输出
{
Push(&s,a%b);
a=a/b;
}
printf("转换成%d进制的结果的: ",b);
while(!IsEmpty(&s))
{
i=Pop(&s);
printf("%d",i);
}
free(s.base);//释放堆,添加
printf("\n");
}
/*void TenUpConversion(long n,int N)//函数功能:11~16进制的转换
{
int e;
seqstack s;init(&s);
while(n)
{
Push(&s,n%N);
n=n/N;
}printf("转换成%d进制的结果的: ",N);
while(!IsEmpty(&s))
{
e=Pop(&s);
switch(e)//选择代换
{
case 0:printf("0");break;
case 1:printf("1");break;
case 2:printf("2");break;
case 3:printf("3");break;
case 4:printf("4");break;
case 5:printf("5");break;
case 6:printf("6");break;
case 7:printf("7");break;
case 8:printf("8");break;
case 9:printf("9");break;
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default :printf("%d",e);break;
}
}printf("\n");
}*/
void main()
{
long n; int N; long t;
char kb=" ",ch;
printf("说明:\n此程序的主要功能是:将一个十进制数转换成N进制数(0<N<=16)\n输入“#”键退出程序\n请注意输入数据的正确性\n");
while(kb!='#')
{
printf("请输入十进制数n:");
//scanf("%ld",&n);
while((scanf("%ld",&n))!=1)//剔除错误输入功能没实现~~~等待大神完善·····
{
while((ch = getchar())!='\n' )
getchar(ch);
printf("输入错误,请重新输入一个正确的十进制整数,如10或者50\n请重新输入:");
scanf("ld",&n);
}
printf("请输入需要转换成的进制N:\n");
scanf("%d",&N);
while ((N>=1&&N<=16)!=1)
{
getchar();
printf("输入错误,请重新输入一个1~16的正整数:");
scanf("%d",&N);
}
TenDownConversion(n,N);
/*else
TenUpConversion(n,N);*/
getchar();
//t=n+N;此是测试····
//printf("此是测试····经过和%ld\n",t);
printf("是否继续转换?(输入“#”结束程序)");
//kb=getch();
scanf("%c",&kb);
}
}
/*说明,此代码在输入n检测时,输入小数、负数直接错误;输入字母可以检测到,但是要按两次回车,蛋疼;输入字符正确*/