// CALCTXT.C Copyright (c) TrSek alias Zdeno Sekerak // Program spocita matematicke priklady ktore su zapisane v textovom subore. // // Datum:10.12.2008 http://www.trsek.com #include void main(void) { FILE *f, *fo; char subor[32]; int cislo1; int cislo2; char operand; char znak; int vysledok; int i; int koniec; printf("Zadaj meno suboru:"); i=0; do { subor[i] = getch(); putch(subor[i]); }while (subor[i++]!='\r'); subor[i-1]='\0'; f = fopen(subor, "rt"); fo = fopen("temp.$$$", "wt+"); if( f==NULL ) { printf("Nemozem otvorit subor."); return; } while( !feof(f)) { cislo1=0; koniec=1; do { znak = fgetc(f); if( feof(f)) goto koniec; fputc(znak,fo); if(znak >='0' && znak <='9') cislo1=cislo1*10 + znak-'0'; else koniec=0; } while(koniec); operand = znak; cislo2=0; koniec=1; do { znak = fgetc(f); fputc(znak,fo); if(znak >='0' && znak <='9') cislo2=cislo2*10 + znak-'0'; if( znak=='=' ) koniec=0; } while(koniec); // do konca riadku do { znak = fgetc(f); } while(( znak != '\n') && ( znak != '\r') && !feof(f)); if(operand=='+') vysledok = cislo1+cislo2; if(operand=='-') vysledok = cislo1-cislo2; if(operand=='*') vysledok = cislo1*cislo2; if(operand=='/') vysledok = cislo1/cislo2; // zapis, minus if(vysledok<0) { fputc('-',fo); vysledok=-1*vysledok; } koniec=0; znak=(vysledok/1000); vysledok=vysledok % 1000; if(znak || koniec) { koniec=1; fputc(znak+'0',fo); } znak=(vysledok/100); vysledok=vysledok % 100; if(znak || koniec) { koniec=1; fputc(znak+'0',fo); } znak=(vysledok/10); vysledok=vysledok % 10; if(znak || koniec) { koniec=1; fputc(znak+'0',fo); } //znak=vysledok; fputc(vysledok+'0',fo); fputc('\n',fo); } koniec: // zatvorime fclose(f); fclose(fo); // premenujeme remove(subor); rename("temp.$$$", subor); }