Member 12702400 Ответов: 3

Как удалить ошибку исключения из следующего случая в C++


этот конкретный случай в моей программе c++ показывает ошибку исключения 13...Как я могу ее исправить...пожалуйста, помогите

case 4:
//here house wise
clrscr();
f1=0;
check=0;
V21:
cout<<"Enter house whose results are to be displayed:"<<endl;
gets(input1);
flag1=validstring(input1);
if(flag1==0)
goto V21;
else
strcpy(house1,input1);
ifstream ifile8("votingsystem",ios::binary);
while(!ifile8.eof())
{
  check++;
  ifile8.read((char*)&v,sizeof(v));
  if(ifile8.eof())
  {
    check++;
    break;
  }
  if((strcmpi(house1,v.gethouse()))==0)
  {
    if(f1==0)
    {
      cout<<"........................................................................\n";
      cout<<setw(20)<<"NAME OF THE CANDIDATE"<<setw(10)<<"CLASS"<<setw(10)<<"AGE"<<setw(10)<<"GENDER"<<setw(10)<<"HOUSE"<<setw(10)<<"VOTES"<<"\n";
      cout<<"............................................................................................................................................\n";
    }
    v.displaytabresult();
    f1++;
  }
}
ifile8.close();
if(check==2)
{
  cout<<"Please enter details first/n";
  getch();
  goto V1;
}<a href=""></a>
if(f1==0)
cout<<"No such house exists"<<endl;
getch();
goto V6;


Что я уже пробовал:

я попробовал переписать этот код, дважды проверил его из проекта, данного мне учителем, но ничего не вышло

3 Ответов

Рейтинг:
2

CPallini

Как уже было сказано, вам нужно научиться использовать отладчик. Кроме того, вы определенно должны избегать использования goto, опубликованный код-это действительно беспорядок.


Рейтинг:
2

Jochen Arndt

Я должен догадаться, потому что вы не показали нам точное сообщение об ошибке. Но "исключение 13" может быть Общая ошибка защиты-Википедия, свободная энциклопедия[^].

Наиболее распространенной причиной этих исключений являются ошибки доступа к памяти (нарушения доступа). Поэтому проверьте свой код, если вы передаете где-то недопустимый указатель или получаете доступ к массиву за пределами границ (например, запись за пределами размера массива).

Я (и другие здесь) не могу этого сделать, потому что вы не показывали объявления для ваших переменных (мы не знали, например, размеров ваших строковых буферов и типа ваших переменных). v класс).

Обратите внимание, что последний пункт (ваш v class) может быть причиной того, что Вы читаете данные из файла. Это не будет работать, если класс содержит нецелые члены (например, указатели на объекты, выделенную память или любые другие классы, которые ведут себя аналогично).

Я знаю что вы новичок но даже для новичка код уродлив:


  • Вы смешиваете методы ввода-вывода C и C++ (функции и потоки getXXX)
  • Вы используете goto
  • У вас есть большие блоки кода внутри switch блок
  • Вы не проверили, было ли открытие файла успешным


Рейтинг:
1

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

Советы:
- Используйте отладчик, чтобы увидеть, где происходит исключение.
- избегайте goto в коде.
Нота:
- не указывая тип и размер переменных, вы гарантируете, что мы не сможем понять, что не так в коде.


CPallini

5.

Patrice T

Спасибо