如何使在TC下通过的程序,也不能在VC6.0下通过?

yue_xiong 2001-02-26 05:01:00
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
cindy2000 2001-02-27
  • 打赏
  • 举报
回复
找本VC入门的资料看看吧。
bzshow 2001-02-27
  • 打赏
  • 举报
回复
都提示些什么錯誤?
yue_xiong 2001-02-27
  • 打赏
  • 举报
回复
to lhxx: 原码如下

#include "stdafx.h"

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
extern "C"
{

}
#define H_bit 55
#define MAX_INPUT 224
#define MAX_POINT 2

#define INT struct {long int num[H_bit]; int bit,point,sign; long index;}

#define FORMAT_ERROR Format error in your input.
#define OUT_RANGE Date is out of range!
#define UNKNOWN_CODE Unknown code or unknown format in your input.
#define DIVIDEND_IS_0 The dividend is '0'!
#define MODE_UNFIT The Number can`t display in this Mode!Please Chang and Retry!
#define err(err_info) {printf("\nERROR:"#err_info"\n"); exit(0);}

#define AutoFormat 0
#define NulFormat 1
#define InxFormat 2
#define PotFormat 3
int Mode = AutoFormat;

void mul_(INT num1,INT num2,INT *num3);
void div_(INT num1,INT num2,INT *num3);
void add_(INT num1,INT num2,INT *num3);
int delzero(INT *num);
void format(INT *num);
void type(INT number);
int trans(char c);
void turn(char n[MAX_INPUT],INT *number);

/*-------------------MAIN--------------------*/
int main(int argc, char* argv[])
{
/*------------------Define-------------------*/
char kind;
int mode;
char s1[MAX_INPUT],s2[MAX_INPUT];
INT num1={{0},0,0,0,0},num2={{0},0,0,0,0},num3={{0},0,0,0,0};
/*------------------Input--------------------*/
printf("Please put in number 1:\n");
gets(s1);
printf("Please put in number 2:\n");
gets(s2);
printf("please put in sign(+ - * /):\n");
kind=getchar();
printf("\n");
/*------------------Turn & OutPut------------*/
turn(s1,&num1);
turn(s2,&num2);
type(num1);
printf(" %c ",kind);
type(num2);
/*------------------Manege-------------------*/
switch(kind)
{
case '-':
num2.sign=-1*num2.sign;
case '+':
add_(num1,num2,&num3);
break;
case '*':
mul_(num1,num2,&num3);
break;
case '/':
div_(num1,num2,&num3);
break;
default:
err(UNKNOWN_CODE);
}
/*------------------Output-------------------*/
printf("=");
type(num3);
printf("\n");
/*------------------main() is End------------*/
return 0;
}

/*------------------TURN---------------------*/
void turn(char n[MAX_INPUT],INT *number)
{
char *head=n,*end=n,*pnt=NULL,*e=NULL;
int sn=1,i=4,j=0;
long int mid=0;
char *p_dcm,*p_itg,*p_idx;
/*-------------------Upfront Read------------*/
if(*head=='-')
{
head++;
end++;
number->sign=-1;
}
else number->sign=1;
while(*end!='\0')
{
if(*end=='.') pnt=end;
if(*end=='e'||*end=='E') e=end;
end++;
}
if(e ==NULL) e=end;
if(pnt==NULL) pnt=e;
if(*head==48&&(head+1)!=pnt) err(FORMAT_ERROR);
if((e-head-1)>4*H_bit) err(OUT_RANGE);
/*-----------------Read Index----------------*/
p_idx=e+1;
if(*p_idx=='-')
{
p_idx++;
sn=-1;
}
if(*p_idx=='+') p_idx++;
while(end-p_idx>0)
{
number->index+=trans(*p_idx)*pow(10,end-p_idx-1);
p_idx++;
}
number->index=number->index*sn;
/*---------------Read Decimal Digits----------*/
p_dcm=pnt+1;
number->point=H_bit-(int)(H_bit*4-(e-pnt)+1)/4;
while( e-p_dcm>0 )
{
i--;
mid+=trans(*p_dcm)*pow(10,i);
p_dcm++;
if(i==0||p_dcm==e)
{
number->bit++;
number->num[number->point-number->bit]=mid;
mid=0;
i=4;
}
}
/*----------------Read Integral--------------*/
p_itg=pnt-1;
while(p_itg-head>=0)
{
mid+=trans(*p_itg)*pow(10,j);
j++;
if(j==4||p_itg==head)
{
number->num[number->bit]=mid; mid=0;
number->bit++;
j=0;
}
p_itg--;
}
/*----------------Turn() is End---------------*/
}

/*-----------------TRANS----------------------*/
int trans(char c)
{
if(c>57||c<48) err(UNKNOWN_CODE);
return((int)(c-48));
/*---------------Trans is end-----------------*/
}

/*------------------TYPE----------------------*/
void type(INT number)
{
int i;
if(number.bit==0)
{
printf("0");
return;
}
if(number.sign==-1) printf("-");
if(number.point==number.bit)
{
printf("0");
i=number.bit-1;
}
else
{
printf("%ld",number.num[number.bit-1]);
i=number.bit-2;
}
for(;i>=0;i--)
{
if(i==number.point-1) printf(".");
printf("%04ld",number.num[i]);
}
if(number.index!=0&&(number.bit>1||number.num[0]!=0))
{
printf("e");
printf("%-ld",number.index);
}
}
/*----------------Type is end----------------*/

/*-----------------Format--------------------*/
void format(INT *num)
{
switch (Mode)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
}
}

/*------------------DelZero------------------*/
int delzero(INT *num)
{
int No=0,i;
while(num->num[No]==0) No++;
for(i=No;i<num->bit;i++) num->num[i-No]=num->num[i];
num->bit-=No;
if(num->point-No>=0)
num->point-=No;
else
{
num->index=4*(num->bit+No-num->point-1);
num->point=num->bit-1;
}
return No;
}

/*------------------Add-----------------------*/
void add_(INT num1,INT num2,INT *num3)
{
/*-----------------define--------------------*/

int i,Bit,Lbit,Indm=1,Inds=1,Los=0;
long Mid;
/*-------------Find the move & stand object--------*/
INT *move,*stand;
/*--------------Who is larger------------------*/
if((Bit=(num1.index-num2.index)+4*(num2.point-num1.point))>=0)
{
move=& num1;
stand=& num2;
}
else
{
move=& num2;
stand=& num1;
Bit=-Bit;
}
/*---------- decide the format------------------- */
if(stand->index>=0)
Indm=pow(10,Bit%4);
else
{
Inds=pow(10,4-Bit%4);
Bit+=4;
}
Lbit=Bit/4;
if(Lbit+move->bit>=H_bit)
Los=Lbit+move->bit-H_bit;
/*----------the 'Move' object add into the 'Stand' object-----------*/
for(i=0;i<move->bit;i++)
num3->num[i+Lbit-Los]+=move->sign*Indm*move->num[i];
for(i=Los;i<stand->bit;i++)
num3->num[i-Los]+=stand->sign*stand->num[i]*Inds;
/*-----------decide bit & sign-------------------- */
num3->bit=( (move->bit+Lbit>=stand->bit) ? move->bit+Lbit : stand->bit )-Los;
num3->sign=1;
/*----------------format them-------------------------*/
do
{
for(i=0;i<num3->bit;i++)
{
Mid=num3->num[i]*(num3->sign);
num3->num[i]=(Mid%10000+10000)%10000;
num3->num[i+1]+=(Mid-num3->num[i])/10000;
}
for(i=((num3->bit>=H_bit) ? H_bit-1 : num3->bit);i>=0;i--)
{
if(num3->num[i]!=0)
{
num3->bit=i+1;
num3->sign=( (num3->num[i]>=0) ? 1 : -1);
break;
}
}
}while(num3->num[num3->bit-1]<0);
/*-----------------decide point & index---------------*/
if(stand->index<0)
{
num3->point=move->point+Lbit-Los;
num3->index=move->index;
}
else if(Los==0)
{
num3->point=stand->point;
num3->index=stand->index;
}
else
{
num3->point=move->point+Lbit-Los;
num3->index=move->index-Bit%4;
}
}

/*-----------------------Div_----------------------*/
void div_(INT num1,INT num2,INT *num3)
{
int i,j;
INT mid={{0},0,0,0,0};
if(num2.num[0]==0&&num2.bit<=1) err(DIVIDEND_IS_0);
mid.bit=num1.bit+num2.bit+MAX_POINT;
num3->point=num1.point+num2.bit-num2.point+MAX_POINT;
num3->sign=num1.sign*num2.sign;
num3->index=num1.index-num2.index;
for(i=0;i<num1.bit;i++) mid.num[i+num2.bit+MAX_POINT]=num1.num[i];
for(i=num1.bit+MAX_POINT;i>=0;i--)
{
while(1)
{
for(j=i+num2.bit;(j>i)&&(mid.num[j]==num2.num[j-i]);j--);
if(mid.num[j]<num2.num[j-i]) break;
for(j=0;j<num2.bit;j++)
{
mid.num[i+j]-=num2.num[j];
if(mid.num[i+j]<0)
{
mid.num[i+j+1]--;
mid.num[i+j]+=10000;
}
}
num3->num[i]++;
}
if((num3->num[i]!=0)&&(num3->bit==0)) num3->bit=i+1;
}
if(num3->point>=num3->bit) num3->bit=num3->point+1;
}

/*----------------------Mul_-----------------------*/
void mul_(INT num1,INT num2,INT *num3)
{
int i,j;
long mid=0;
int Los=0;
if(num1.bit+num2.bit-1>=H_bit)
{
Los=num1.bit+num2.bit-H_bit-1;
if(num1.num[num1.bit-1]*num2.num[num2.bit-1]>9999) Los++;
}
for(i=0;i<num1.bit;i++)
{
for(j=0;j<num2.bit;j++)
{
if(j==Los-i-1) num3->num[0]+=(num1.num[i]*num2.num[j])/10000;
if(j<Los-i) continue;
mid=num3->num[i+j-Los];
mid+=num1.num[i]*num2.num[j];
num3->num[i+j-Los]=mid-10000*(long)(mid/10000);
num3->num[i+j+1-Los]+=mid/10000;
}
}
num3->bit=num1.bit+num2.bit-1-Los;
if(num3->num[num3->bit]!=0&&num3->bit<H_bit) num3->bit++;
num3->index=num1.index+num2.index+4*Los;
num3->point=num1.point+num2.point;
num3->sign=num1.sign*num2.sign;
if(Los!=0)
{
num3->index+=(num3->bit-1-num3->point)*4;
num3->point=num3->bit-1;
}
}
cindy2000 2001-02-26
  • 打赏
  • 举报
回复
究竟是编译不了还是运行不了?
随风bj 2001-02-26
  • 打赏
  • 举报
回复
很有可能(我以前在TC2上写的好多程序都要进行修改),将代码贴出来看看

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧