Войти

Показать полную графическую версию : с++ не могу разобраться с try catch


bezumes
30-04-2006, 19:27
Здравствуйте! мне надо чтобы если юзер вводит неверные данные ему было предложено вновь ввести данные заново.Почему этого не происходит
#include "stdafx.h"
#include <iostream>
#include <locale>
#include <conio.h>
typedef unsigned short int g;
int main()
{
g b=0;g m=1;
std::wcout.imbue(std::locale(".866"));
for(g i=0;m==1;i++)
{
try
{
std::wcout<<L"Введите столбец по которому надо сортировать(меньше 10)";
std::cin>>b;m=0;
}
catch(...){m=1;}
}
return EXIT_SUCCESS;
}

Vlad Drakula
30-04-2006, 19:33
bezumes
а что должно происходить?
постарайтесь объяснить логику когда который вы написали... мне очень кажется что тогда вы сами сможете найти ошибку в нем...
(а пока я не вижу где у вас вообще кидаются эксепшены...)

pva
04-05-2006, 21:04
Нужно добавить (до цикла):

std::cin.exceptions(std::ios::badbit|std::ios::failbit);

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

do {
...
} while(!(std::cin >> value));

Или по-современному:

struct subtask_t
{
int fold_exceptions;
int val;

subtask_t() :
fold_exceptions(std::cin.exceptions()),
val()
{
std::cin.exceptions(std::ios::badbit|std::ios::failbit);
}

~subtask_t()
{
std::cin.exceptions(fold_exceptions);
}

void operator()
{
for(;;)
{
try {
std::cin >> val;
return;
}
catch(std::ios::failure&)
{
}
}
}
}




© OSzone.net 2001-2012