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

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

Восстановить пароль Регистрация
 
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
25.09.2011, 16:03     проблема с проверкой вводимых данных #1
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 16:03     проблема с проверкой вводимых данных
Посмотрите здесь:

C++ Проверить на тип вводимых данных
Проверка вводимых данных. C++
C++ Мини База Данных фамилий с проверкой
C++ Определение типа вводимых данных
Проверка на коректность вводимых данных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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() и при ошибке выходить из программы.
Skip
3 / 3 / 0
Регистрация: 11.11.2010
Сообщений: 38
25.09.2011, 16:53  [ТС]     проблема с проверкой вводимых данных #3
спасибо большое, ввод будет осуществятся только с клавы
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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;
Nameless One
25.09.2011, 17:00     проблема с проверкой вводимых данных
  #5

Не по теме:

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

Yandex
Объявления
25.09.2011, 17:00     проблема с проверкой вводимых данных
Ответ Создать тему
Опции темы

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