Ошибка при выполнении программы - 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, чтобы указать, что программа успешно завершилась