Ошибка при выполнении программы - 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;
}

Объяснение кода листинга программы

  1. Включаем файл стандартного ввода-вывода
  2. Задаём команду main() — точка входа в программу
  3. Выводим на консоль символ 'BUF' и его шестнадцатеричное значение 'BUF' с помощью функции fprintf(stdout, %c %X\n, 'BUF', 'BUF');
  4. Выводим на консоль символ 'B' и его шестнадцатеричное значение 'B' с помощью функции fprintf(stdout, %c == hex %X\n, 'B', 'B');
  5. Выводим на консоль символ 'U' и его шестнадцатеричное значение 'U' с помощью функции fprintf(stdout, %c == hex %X\n, 'U', 'U');
  6. Выводим на консоль символ 'F' и его шестнадцатеричное значение 'F' с помощью функции fprintf(stdout, %c == hex %X\n, 'F', 'F');
  7. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы