Вот вобщемто то что я уже написал.
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include"TARASOV_ERROR.h"
#define KOL 5
#define STRLEN 50000
#define OSN 10
FILE *fo,*fi;
char *sim[KOL]={"+",
"-",
"*",
"/",
"!"};
char answer[STRLEN];
int num1[STRLEN],num2[STRLEN],res[STRLEN],*n1=num1,*n2=num2,*r=res,q,e,k,w1,w2,i;
char oper[STRLEN],*op=oper,c;
int showstring(const char *str)
{
char strASCII[STRLEN];
CharToOem (str,strASCII);
printf("%s\t",strASCII);
return 0;
}
int summa()
{
e=0;
while(w1||w2){
q=(*n1--)+(*n2--)+e;
if(q>9){q%=OSN;*r++=q;e=1;}
else{*r++=q;e=0;}
if(w1>0)w1--;
if(w2>0)w2--;
i++;
}
if(e==1){*r++=e;i++;}
for(i--;i!=-1;i--)
printf("%d",res[i]);
printf("\n");
return 0;
}
int subtract()
{
e=0;
r=res;
i=w1;
while(w1){
*n1+=e;
if(*n1<*n2){*r++=(*n1--)+OSN-(*n2--);e=-1;}
else {*r++=(*n1--)-(*n2--);e=0;}
w1--;
}
while(res[i]==0)i--;
for(i;i!=-1;i--)
printf("%d",res[i]);
printf("\n");
return 0;
}
void multiple()
{
}
void DIV()
{
}
void Fact()
{
}
int main()
{
w1=0;w2=0;
fo=fopen("outtext.txt","w");
if((fi=fopen("in.txt","r"))==NULL)exit(Error(2,"in.txt"));
while(c!=EOF)
{
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(res,0,sizeof(res));
memset(oper,0,sizeof(oper));
c=getc(fi);
while(isspace©)c=getc(fi);
if(c==EOF){fclose(fi);return 0;}
while(isalnum©){
w1++;
*n1++=c-'0';
c=fgetc(fi);}
n1--;
while(isspace©)c=getc(fi);
while(!isspace©&&c!=';'&&!isdigit©){
*op++=c;
c=fgetc(fi);}
*op--=0;
while(isspace©)c=getc(fi);
while(c!=';'){
w2++;
*n2++=c-'0';
c=fgetc(fi);}
n2--;
for(k=0;k<KOL;k++)
if(*op==*sim[k])break;
switch(k)
{
case 0:summa();
break;
case 1:subtract();
break;
case 2: multiple();
break;
case 3: DIV();
break;
case 4: Fact();
fprintf(fo,"%s",answer);
break;
}
//}
}
// printf("%d",num1[4]);
fclose(fi);
fclose(fo);
return 0;
}
Сообщение отредактировано: blackhard -