singlepost

контроль ошибок ввода в С++ << На главную или назад  

как можно с помощью исключений контолировать достоверность ввода элементов по типуи выход за границы типа при вводе?

22 ответов в теме “контроль ошибок ввода в С++”

  1. 22
    Артур Терменжи ответил:

    в лабе стояло условие проверять с помощью эксепшнов,вот я и парился, так бы написал полегче) мне смешно,что главная тема лабы была дерево поиска, а заюзание экспешна шло как основное задание для всех.дерево и все методы быстро написал, а с этой хней 2 ночи разбирался)
    Влад Ламбар, спс за идею, седня все успешно сдал)

  2. 21
    Борис Глебов ответил:

    Артур Терменжи

    Ми на с++не пишет, но все же, не проще ли получить ввод cin во float, затем проверить

    if((число – ПолучениеЦелойЧасти(число)) == 0)
    действие;

  3. 20
    Vlad Ламбар ответил:

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

    Хотя этот вариант тоже можно развить и убрать классы перегрузки операторов и прочее. Доделать так что бы проверка была во время ввода. Но тогда переход от С++ к С :)

  4. 19
    Нодир Азам ответил:

    "Люблю" С++, на нем для самых простых вещей пишешь велосипед ))
    Точнее "высокие ходули", чтобы не наступать на одни и те жеграбли.
    На Java или C# все это намного легче делается.

  5. 18
    Артур Терменжи ответил:

    ага уже нашел, спс за идею

  6. 17
    Макс Донцов ответил:

    есть atof во float

  7. 16
    Vlad Ламбар ответил:

    в перегруженом операторе ">>" считываешь с клавиатуры данные к примеру в строку…и если в ней будет хоть один символ не цифра
    кидаешь ексепшен. Если все в порядке приводиш с помощью atoi к числу и присваеваешь полю класа…
    все проверки делаешь в операторе ввода…
    ексепшен встраиваешь в класс…
    для него еще определяешь момент когда число превышает рамки допустимого…

    несмотря на то что метод через задницу, проще в голову не приходит…пока )

  8. 15
    Артур Терменжи ответил:

    жирное извращение…надо попробовать спс))

  9. 14
    Vlad Ламбар ответил:

    мысли не стандартно :) а потом подганяй под рамки :)
    со временем все придет :)

  10. 13
    Артур Терменжи ответил:

    а есть подобие atoi для конвертации во float или double?

  11. 12
    Артур Терменжи ответил:

    при перегруженном ">>" я считаю значение float, затем для записи в класс int запустится этот оператор ,в котором полю данных класса int
    присвоится считанное значение float… правильно тебя понял?

  12. 11
    Vlad Ламбар ответил:

    а…так…ну для встроенных типов наверно никак, точнее я не знаю такого способа…
    Если уж так надо то изваратись так:
    1) создай класс обертку для каждого типа
    2) обяви explicit конструктор…
    3) перегрузи для класов такие вещи как "<<" ">>"

    а дальше делай уже что надо…

  13. 10
    Артур Терменжи ответил:

    при приведении типов исключение не генерируется само. например мне надо считывать int. тогда при вводе числа 1.5 оно просто преобразуется к 1, исключение не возникает и ввод на этом заканчивается.
    собственно и вопрос возник: как авто приведение типов отключить?

  14. 9
    Vlad Ламбар ответил:

    try{
    //здесь все операции при любой ошибке поймает…
    }catch(…)

  15. 8
    Нодир Азам ответил:

    int i; // нужно число ввести
    cout<<"Enter: "<<endl;
    cin>>i;
    if(i>=MAX){ //MAX – максимальное значение типа int
    //Пишем ошибку
    }

    опечатка вышла

  16. 7
    Артур Терменжи ответил:

    Нодир نادر Азам о такоем варианте думал, но мне надо работать со всеми числовыми типами. лучше отключить приведение типов, чтобы генерировалось исключение, но я не знаю как его отключить

  17. 6
    Нодир Азам ответил:

    Тут не подскажешь, если не увидишь что и куда…
    ну например так…

    int i; // нужно число ввести
    cout<<"Enter: "<<endl;
    cin>>i;
    if(i<MAX){ //MAX – максимальное значение типа int
    //Пишем ошибку
    }

  18. 5
    Артур Терменжи ответил:

    или хотя бы как запретить приведение типов.(если бы нашел в гугле/мсдне/книгах не спрашивал бы)

  19. 4
    Артур Терменжи ответил:

    если не сложно можешь код такого ввода написать плз

  20. 3
    Дмитрий Матвеичев ответил:

    ну запрещаешь приведение типов и собственно проверяешь

  21. 2
    Артур Терменжи ответил:

    да, ввод с консоли. Win32 приложение

  22. 1
    Дмитрий Матвеичев ответил:

    откуда вводишь? С консоли?

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