Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
1

проблема с проверкой вводимых данных

25.09.2011, 16:03. Просмотров 364. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <conio.h>
using namespace std;
 
double c,f;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    setlocale(LC_ALL, "rus");
 
    cout << "Введите температуру в фаренгейтах: \n";
 
    do
    {
        if (cin >> f)
        {
            c=(f-32)* 5/9;
            cout << "температура в цельсиях : \n" << c;
        }
        else
        {
            cout << "Вы ввели не число\n";
        }
    }
    while (cin.fail());
 
    getch();
    return 0;
}
Если ввести не число то он начинает выводить "Вы ввели не число", но он не запрашивает новое значение f
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 16:03
Ответы с готовыми решениями:

Написать функцию для ввода текущего размера массива с проверкой корректности вводимых данных
Написать функцию для ввода текущего размера массива с проверкой корректности...

Проблемы с проверкой введённых данных
Никак не могу раобраться с проверкой на ввод числа, символа Которую нужно...

Мини База Данных фамилий с проверкой
Здравствуйте! Помогите пожалуйста написать простую программку на С++ очень...

Проверка вводимых данных
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении...

Проверка вводимых данных.
предполагается, что функция будет проверять, что ввел пользователь, и, если он...

4
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
25.09.2011, 16:25 2
Там две проблемы. Во-первых не сбрасывается флаг ошибки потока, во-вторых нечисловые символы из потока не извлекаются, обе причины приводят к бесконечным перезапросам.
Я бы, пожалуй, преобразовал бы цикл ввода как-нибудь так:
C++
1
2
3
4
5
6
7
8
9
    while (!(cin >> f))
    {
        cin.clear();
        while (cin.get() != '\n')
            ;
        cout << "Вы ввели не число\n";
    }
    c=(f-32)* 5/9;
    cout << "температура в цельсиях : \n" << c;
Тут, правда, тоже остаётся небольшая проблема. Например если перенаправить ввод из файла с некорректными данными. Надо ещё проверять успешность get() и при ошибке выходить из программы.
1
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
25.09.2011, 16:53  [ТС] 3
спасибо большое, ввод будет осуществятся только с клавы
0
grizlik78
Эксперт С++
1988 / 1480 / 192
Регистрация: 29.05.2011
Сообщений: 3,059
25.09.2011, 16:59 4
Как вариант можно не строку пропускать, а слово.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    while (!(cin >> f))
    {
        cin.clear();
        string dummy;
        cin >> dummy;
        if (!cin)
        {
            cerr << "Критическая ошибка ввода" << endl;
            return 1;
        }
        cout << "Вы ввели не число\n";
    }
    c = (f-32) * 5/9;
    cout << "температура в цельсиях : \n" << c;
1
Nameless One
25.09.2011, 17:00     проблема с проверкой вводимых данных
  #5

Не по теме:

Цитата Сообщение от Skip Посмотреть сообщение
спасибо большое, ввод будет осуществятся только с клавы
это может гарантировать только пользователь, а не разработчик программы :D

0
25.09.2011, 17:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2011, 17:00
Привет! Вот еще темы с ответами:

Проверка вводимых данных
Как сделать так, чтобы при вводе символов в строку года поступления на экран...

Проверка вводимых данных
Вот часть программы int main(void) { int vop; setlocale(LC_ALL,...

Проверка вводимых данных
#include &lt;iostream&gt; using namespace std; int main() { double a,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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