|
|
编辑了如下小程序(数制转换),但遇到了问题,需要拿到wndows下给导师过目,结果notepad查看vi文本变异的离谱,现将之贴下:
#include<stdio.h>
#define O "Octal"
#define H "Hexadecimal"
#define B "Binary"
#define D "Dcimalization"
main()
{
char key;
printf("1.Calculate\n2.Transfrom\n");
scanf("%c",&key);
switch(key)
{
case 'c':;break;
case 't':printf("You choice T, and then you want:\n");transform();break;
default:printf("error");
}
}
transform()
{
char keyS,keyO;
int source=0;
printf("From:\n1.%s\n2.%s\n3.%s\n4.%s\n",D,B,H,O);
scanf("%c",&keyS); /* error found begin */
switch(keyS)
{
case 'd':scanf("%d",&source);break;
case 'b':source=dbcalc(source);break;
case 'h':scanf("%x",&source);break;
case 'o':scanf("%o",&source);break; /* erroe found end */
default:printf("error");
}
printf("To:\n1.%s\n2.%s\n3.%s\n4.%s\n",D,B,H,O);
scanf("%c",&keyO);
switch(keyO)
{
case 'd':printf("%d",source);break;
case 'b':printf("%d",dbcalc(source));break;
case 'h':printf("%x",source);break;
case 'o':printf("%o",source);break;
default:printf("error");
}
}
dbcalc(int source)
{
float order;
char group[12];
if(source=='\0') /* none operate for b->d */
{
printf("check %s number again:\nsource=",B);
int level=0;
int round=0;
char lock; /* lock only point but not usful now */
for(;group[level]!='\0';level++) /* get group[] level */
scanf("%c",&group[level]);
int tmp=level;
for(;level>0;level--)
{
if(group[level]=='.')
{
int a=tmp-level,b=level+1;
int GroupA[a],GroupB;
lock='y';
if(lock!='y')
{
/* two arithmetic for Binary variable with point */
for(;a>0;a--)
{
GroupA[a]=group[a];
if(GroupA[a]=='1')
{
order+=power(2,round);
round++;
}
else round++;
}
for(;b<tmp;b++)
{
GroupB[tmp-b]=group;
round=0;
if(GroupB=='1')
{
order+=power(2,round);
round++;
}
}
}
else printf("real number error!");
break;
}
else if(group[level]=='1')
{
order+=power(2,round);
round++;
}
else round++;
}
}
else order=source; /* d->b */
return order;
}
power(int dat,int round)
{
int order=dat;
for(;round>=0;round--)
order*=dat;
return order;
}
------------------------------------------------
恩?怎么又能复原了?奇怪……
既然复原了,就麻烦各位看看,出错在哪里?
输出出错的地方都标上了“error found".
不过实际上,我还不知道下半部分是否正确,因为那些错误让下半部分不能继续了。 |
|