Ошибка при выполнении программы - C (СИ)
Формулировка задачи:
Всем доброго врмени суток! При выполнении програмы, код которой указан ниже, выдаёт ошибку и поялвляется окно со следующей записью: Unhandled exception at 0x776215de in 1.exe: 0xC00000FD: Stack overflow.
Суть програмы:происходит считывание информации из файла, информация считывается с помощью 2 буферов; в файле примерно такая запись : 123(10)=11110000(2)=123(4) (при считывании в 1 буфер помещается число, а в другой - основание системы счисления, которое в скобках); - программа должна проверить правильность перевода числа из одной системы счисления в другую, и вывести результат на экран и в другой файл.
код программы:
#include<stdio.h> #include<ctype.h> #include<stdlib.h> #include<time.h> #define BUF 20; #define FIN "fin.txt" #define FOUT "fout.txt" FILE*Read=NULL; FILE*Wr=NULL; char *sErrors[]={ "Can not open file", "Sintaxis error, enter write number or change the sistem of" }; void error(int); int gorner(char*,int); char* rgorner(int,int); int main() { char buf0['BUF']={0},buf1['BUF']={0},*b0=buf0,*b1=buf1,c,_c=0; int result,Base,wrong=0,right=0,first=0,etal,comon=0,b; if (!(Read=fopen("FIN","r"))) error(1); printf("File is correctly opened"); if (!(Wr=fopen("FOUT","w"))) error(1); printf("File for write is correctly opened*/ Wr=fopen("FOUT","w"); do { if (isalnum(c))*b0++=c; else { if (isalnum(_c))*b0=0; if (isspace(c))continue; else if (c=='(') { *b0=0; while ((c=fgetc(Read))!=')') *b1++=c; *b1=0; } else if ((c=='=')||(c==';')) { b0=buf0; b1=buf1; Base=gorner(buf1,10); result=gorner(buf0,Base); if (first==0) { etal=result; first=1; printf("cheking for %s(%s)\n",buf0,buf1); fprintf(Wr,"cheking for %s(%sn",buf0,buf1); } else {comon++; if (etal==result){ printf("=%s(%s)-\t",buf0,buf1); fprintf(Wr,"=%s(%s)-\t",buf0,buf1); printf("All right\n\n"); fprintf(Wr,"All right\n\n"); right++; } else { printf("=%s(%s)-\t",buf0,buf1); fprintf(Wr,"=%s(%s)-\t",buf0,buf1); printf("It is wrong\t right:%s(%d)\n\n",rgorner(etal,Base),Base); fprintf(Wr,"It is wrong\t right:%s(%d)\n\n",rgorner(etal,Base),Base); wrong++; } if (c==';') first=0; } } _c=c; } } while (!(feof(Read))); printf("\nStatistics (comon count):%d\n right-%d\n wrong-%d\n",comon,wrong,right); fprintf(Wr,"statistics (comon count):%d\n right-%d\n wrong-%d\n",comon,wrong,right); printf("Persent for right %d",(right*100)/comon); fprintf(Wr,"Persent for right %d%%",(wrong*100)/comon); printf("Persent for wrong %d%%",(wrong*100)/comon); fprintf(Wr,"Persent for wrong %d%%",(wrong*100)/comon); getchar(); return 0; } int gorner(char* b,int osn) { int rez=0; while(*b) { if((isalpha(*b)?(toupper(*b++)-'A'+10):(*b++-'0'))>=osn) error(2); /*("%s\n",phrase1);*/ rez=rez*osn+(isalpha(*b)?(toupper(*b++)-'A'+10):(*b++-'0')); } return(rez); } char* rgorner(int number, int osn) { char i,buf[20]={0}, *b=buf+20-1; *b--=0; while (number>0) { i=number%osn+((i>9)?i+'A'-10:i+'0'); *b--=i; number=number/osn; } return b+1; } void error(int NumErr) { printf("Error # %d\n %s \n",NumErr,sErrors[NumErr-1]); fprintf(Wr,"Error # %d\n %s \n",NumErr,sErrors[NumErr-1]); fclose(Wr); if (NumErr==1) exit(NumErr); }
Решение задачи: «Ошибка при выполнении программы»
textual
Листинг программы
#include <stdio.h> int main() { fprintf(stdout, "%c %X\n", 'BUF', 'BUF'); fprintf(stdout, "%c == hex %X\n", 'B', 'B'); fprintf(stdout, "%c == hex %X\n", 'U', 'U'); fprintf(stdout, "%c == hex %X\n", 'F', 'F'); return 0; }
Объяснение кода листинга программы
- Включаем файл стандартного ввода-вывода
- Задаём команду main() — точка входа в программу
- Выводим на консоль символ 'BUF' и его шестнадцатеричное значение 'BUF' с помощью функции fprintf(stdout,
%c %X\n
, 'BUF', 'BUF'); - Выводим на консоль символ 'B' и его шестнадцатеричное значение 'B' с помощью функции fprintf(stdout,
%c == hex %X\n
, 'B', 'B'); - Выводим на консоль символ 'U' и его шестнадцатеричное значение 'U' с помощью функции fprintf(stdout,
%c == hex %X\n
, 'U', 'U'); - Выводим на консоль символ 'F' и его шестнадцатеричное значение 'F' с помощью функции fprintf(stdout,
%c == hex %X\n
, 'F', 'F'); - Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д