Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ввод только чисел и точки в консоли


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

Как запретить вводить в консоли что-либо кроме чисел и точки на время выполнения программы?

Автор: Armenia 5.11.2007, 15:01
Код

# 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;
}

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

Автор: jonie 5.11.2007, 15:37
ему нужен контроль ввода, а не контроль правильности ввода )
используй посимвольное считывание без эха, и в случае если все ок - то выводи на экран симввол (точку или цифру) и записывай в буфер, который позже будет преобразован в 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);

Автор: FiMa1 6.11.2007, 11:01
Код

#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;
}

Автор: Flynn 9.11.2007, 11:51
Всем спасибо за ответы.
jonie, твой код - именно то, что было мне нужно, смысл понял дальше уже буду развивать идею под свои нужды.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)