Форум программистов, компьютерный форум CyberForum.ru

Преобразование типов - C++

Восстановить пароль Регистрация
 
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 14:31     Преобразование типов #1
Доброго времени суток. В программе нужен корректный ввод числа. Если, например вводим буковки - выводится сообщение, далее в цикле - continue. Возник такой вопрос: Если мы преобразуем char в double функцией atof(string), при удачном преобразовании возвращается не ноль, но если мне НУЖНО ввести ноль, опять же возвратится ноль, как построить условие? Также при преобразовании если atof находит хоть одно число возвращается не ноль. То-есть:

char str[10];
double number;

cout<<" String: "; // допустим ввели jkfds478kl
cin>>str;
number = atof(str);
if(atof(str) != (0,0))
cout<<" Number: "<<number;
// покажет 478, но ввод то явно некорректный!
// также, если мы введём ноль - условие не сработает, а мне это число тоже нужно.


Подскажите пожалуйста, как преобразовать условие и не создавая при этом шаблонов и т.п.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2013, 14:31     Преобразование типов
Посмотрите здесь:

Преобразование типов C++
Преобразование типов C++
C++ преобразование типов
C++ преобразование типов
Преобразование типов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
11.07.2013, 14:34     Преобразование типов #2
Тут, наверное, проще сразу считывать в double и следить за потоком.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.07.2013, 14:38     Преобразование типов #3
takeN, забыть про atof. Есть sscanf, istringstream, stod...
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 14:46  [ТС]     Преобразование типов #4
gray_fox, а какая из этих функций решит проблему? Желательно чтобы возвращала true/false.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
11.07.2013, 15:04     Преобразование типов #5
takeN, проще как Croessmah предложил:
C++
1
2
3
4
5
std::cin >> number;
if (!std::cin) {
   std::cerr << "Bad input" << std::endl;
   std::exit(EXIT_FAILURE);
}
Но если надо именно из строки считать, то sscanf:
C++
1
2
3
4
if (std::sscanf(str, "%lf", &number) != 1) {
   std::cerr << "Bad input" << std::endl;
   std::exit(EXIT_FAILURE);
}
Добавлено через 2 минуты
istringstream:
C++
1
2
3
4
5
std::istringstream iss(str);
if (!(iss >> number)) {
   std::cerr << "Bad input" << std::endl;
   std::exit(EXIT_FAILURE);
}
Добавлено через 3 минуты
stod:
C++
1
2
3
4
5
6
try {
    number = std::stod(str);
} catch (std::invalid_argument const&) {
    std::cerr << "Bad input" << std::endl;
    std::exit(EXIT_FAILURE);
}
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
11.07.2013, 15:11  [ТС]     Преобразование типов #6
gray_fox, спасибо большое, надеюсь удастся условие расписать)
Yandex
Объявления
11.07.2013, 15:11     Преобразование типов
Ответ Создать тему
Опции темы

Текущее время: 18:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru