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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
takeN
3 / 3 / 1
Регистрация: 22.05.2013
Сообщений: 13
#1

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

11.07.2013, 14:31. Просмотров 412. Ответов 5
Метки нет (Все метки)

Доброго времени суток. В программе нужен корректный ввод числа. Если, например вводим буковки - выводится сообщение, далее в цикле - 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++
Преобразование типов. C++
C++ С++ преобразование типов
C++ Преобразование типов
C++ Преобразование типов
Преобразование типов C++
Преобразование типов C++
C++ Преобразование типов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12878 / 7264 / 810
Регистрация: 27.09.2012
Сообщений: 17,948
Записей в блоге: 2
Завершенные тесты: 1
11.07.2013, 14:34     Преобразование типов #2
Тут, наверное, проще сразу считывать в double и следить за потоком.
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 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     Преобразование типов
Ответ Создать тему
Опции темы

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