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

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

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

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

11.07.2013, 14:31. Просмотров 420. Ответов 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++
Увидел код в сети, решил откомпилировать. Думаю какой код не важно. вылезла куча ошибок. на это LPSTR ActW = new TCHAR; ругается с...

Преобразование типов - C++
Здравствуйте. Такая задача: Дано вещественное число r и целые неотрицательные m и n. Записать число r в строку в формате :m:n по...

Преобразование типов - C++
Как преобразовать char * в float?

Преобразование типов - C++
Как преобразовать массив char message в строку char *strmessage ?????

преобразование типов - C++
Visual c++ 2008 (win 7 64bit) консолька char VolumeNameBuffer; char FileSystemNameBuffer; unsigned long VolumeSerialNumber; ...

Преобразование типов - C++
Вообщем допустим есть два класа, класс T и класс A, комплексные числа в разной форме записи(тригонометрической и алгебраической). Для класа...

Преобразование типов - C++
есть следующая маленькая программка #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int oldFunt,...

Преобразование типов в С++ - C++
Задача: Определить два класса, String с преобразованием из char * в строку и обратно. Мой код: #include &lt;iostream&gt; ...

преобразование типов - C++
memcpy((void*)stroka,(void*)stroka,ykaz_bukva-ykaz_temp+1); что нужно поставить вместо void* чтоб не было предупреждений

Преобразование типов - C++
кое-что о преобразовании типов. float F; __int32 DW; DW=*(__int32 *)&amp;F; значение DW должно совпадать с F побитово, без всяких...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
11.07.2013, 14:34     Преобразование типов #2
Тут, наверное, проще сразу считывать в double и следить за потоком.
gray_fox
What a waste!
1438 / 1167 / 61
Регистрация: 21.04.2012
Сообщений: 2,436
Завершенные тесты: 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!
1438 / 1167 / 61
Регистрация: 21.04.2012
Сообщений: 2,436
Завершенные тесты: 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     Преобразование типов
Ответ Создать тему
Опции темы

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