Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Защита от символов


Автор: zhenium 10.11.2006, 01:39
Парни & Девушки!

Хотел бы с вами посоветоваться... Хочу разобраться, как используя cout и cin в С++, огранизовать защиту от ввода символов при вводе цифр. Может ещё что-то дополнительное нужно. Как это сделать на Си, я понимаю прекрасно. Но с С++ стал разбираться сравнительно недавно. Поэтому многого не знаю. 

Если кому не лень, объясните вообще механизм построения необходимого мне фрагмента кода, поведение cin при введении некорректного значения. Буду признателен, если напишите эквивалент того, что я привёл на Си.

Код

while( !scanf("%d", &ч) 
{                                               
              puts("Vvedite chislo.");
              fflush( stdin );
}


Заранее спасибо!

Автор: sergejzr 10.11.2006, 01:53
C
Код

#include <stdlib.h>
#include <stdio.h>
int main()
{
char number1[10];
scanf("%s",number1);
char * hlp=&(number1[0]);
int result = strtol (number1, &hlp, 10);
if(*hlp!=0) 
{
 printf("%s is a number!\n",number1);
}else
{
 printf("%s  input error!\n",number1);
}
return 0;
}

C++

Код

#include <stdlib.h>
#include <iostream>
int main()
{
char number1[100];
cin>>number1;

char * hlp=&(number1[0]);
int result = strtol (number1, &hlp, 10);
if(*hlp!=0) 
{
 cout<<number1<<" is a number!"<<endl;
}else
{
  cout<<number2<<" is a number!"<<endl;
}
return 0;
}


Добавлено @ 01:54 
strtof даст float, strtod - соответсвенно double.

Автор: Dov 10.11.2006, 07:14
Цитата(zhenium @  10.11.2006,  01:39 Найти цитируемый пост)
напишите эквивалент


Код
    int num;

    cin >> num;        
    while(cin.fail())
    {
        cin.clear();
        cin.ignore(256,'\n');
        cout << "Vvedite chislo." << endl;
        cin    >> num;
    }


Автор: powerfox 10.11.2006, 19:20
А старый добрый get() отменили?
Код

#include<iostream>
#include<cctype>
using namespace std;
...
char ch;
int number;
cin.get(ch)
if (isdigit(ch) ) { 
  cin.putback(ch);
  cin>>number;
  }

Автор: zhenium 11.11.2006, 23:22
Всем спасибо! С Вашей помощью вопрос решён...

Автор: roatueque 8.2.2023, 14:17
Модератор: Сообщение скрыто.

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