Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ввод только чисел и точки в консоли, Как это сделать? 
V
    Опции темы
Flynn
  Дата 5.11.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 21.10.2006

Репутация: нет
Всего: нет



Мне нужно чтобы в консольной программе при запросах параметра пользователь мог ввести только числовые значения и точку, для переменной типа float.

Как запретить вводить в консоли что-либо кроме чисел и точки на время выполнения программы?
PM MAIL   Вверх
Armenia
Дата 5.11.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 25.11.2006

Репутация: нет
Всего: 1



Код

# include <iostream>
# include <string>
using namespace std;
int main()
{
string s;
bool f=true;
cin>>s;
for(int i=0;i<s.length();i++)
    {
    if((s[i]>='0')&& (s[i]<='9')||(s[i]='.')&& (s[0]!='.')&& 
        (s[s.length()-1]!='.'))
            {
                f=true;
            }
                else 
                    {
                        f=false;
                        break;
    
                    }    

    }
    if(f==true)
    {
    //
    }

    return 0;
}

может что то вроди этого?

Это сообщение отредактировал(а) Armenia - 5.11.2007, 15:05
PM   Вверх
jonie
Дата 5.11.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



ему нужен контроль ввода, а не контроль правильности ввода )
используй посимвольное считывание без эха, и в случае если все ок - то выводи на экран симввол (точку или цифру) и записывай в буфер, который позже будет преобразован в float...
например так (код далек от совершенства)
Код

    char ch;
    char buf[1024];
    char* pBuf = buf;
    int npCount = 0;
    while(1){
        ch = _getch();
        if(ch==13) break;  //if <enter>
        if(ch<'0' || ch >'9') 
            if(ch!='.' && ch!='\n')
                continue;
        if (ch=='.') {
            if(npCount==1)continue;
            npCount ++;
        }
        *pBuf = ch;
        if(pBuf > buf+sizeof(buf)) break;
        putc(ch, stdout);
        ++pBuf;
    }
    *pBuf = '\0';
    double f = atof(buf);



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
FiMa1
Дата 6.11.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Код

#include <iostream>

bool isStrDigit(char str[])
{
    bool isDotInDigit = false;
    
    while(*str)
        if( '0' <= *str && *str <= '9' || *str == '.' && !isDotInDigit )
        {
            if(*str == '.' ) isDotInDigit = true;
            str++;
        }
        else return false;
    
    return true;
}

int main()
{
    const int MAX_ENTRY_LEN = 10;
    char input[MAX_ENTRY_LEN];
    
    do {
        std::cout << "Please input a digit: ";
        std::cin.getline(input, MAX_ENTRY_LEN);
        if( isStrDigit(input) ) break;
        else system("cls");
    } while( ! isStrDigit(input) );
    
    std::cout << "digit is " << input << std::endl;
    
    return 0;
}

PM   Вверх
Flynn
  Дата 9.11.2007, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 21.10.2006

Репутация: нет
Всего: нет



Всем спасибо за ответы.
jonie, твой код - именно то, что было мне нужно, смысл понял дальше уже буду развивать идею под свои нужды.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.