Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   с++ не могу разобраться с try catch (http://forum.oszone.net/showthread.php?t=65090)

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
а что должно происходить?
постарайтесь объяснить логику когда который вы написали... мне очень кажется что тогда вы сами сможете найти ошибку в нем...
(а пока я не вижу где у вас вообще кидаются эксепшены...)

pva 04-05-2006 21:04 434403

Нужно добавить (до цикла):
Код:

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.

Время: 22:54.
© OSzone.net 2001-