bezumes |
30-04-2006 19:27 432997 |
с++ не могу разобраться с try catch
Здравствуйте! мне надо чтобы если юзер вводит неверные данные ему было предложено вновь ввести данные заново.Почему этого не происходит
Код:
#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 432999 |
bezumes
а что должно происходить?
постарайтесь объяснить логику когда который вы написали... мне очень кажется что тогда вы сами сможете найти ошибку в нем...
(а пока я не вижу где у вас вообще кидаются эксепшены...)
|
Нужно добавить (до цикла):
Код:
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&)
{
}
}
}
}
|
Время: 22:54.
© OSzone.net 2001-