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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.94
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
#1

Проверка ввода - C++

09.03.2010, 21:44. Просмотров 4048. Ответов 37
Метки нет (Все метки)

Как ограничить ввод символов в программе!!!! На каждый символ, который был введен выдавать сообщение о неправильном вводе????? Надо чтоб можна было ввести только цифры???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2010, 21:44     Проверка ввода
Посмотрите здесь:

C++ проверка ввода - C++
Ребят помогить пожалуста разобраться не работает чертова проверка ввода я в коментарии вынес текст ошибки гляньте ... // laba1.cpp:...

Проверка ввода - C++
Как можно проверить вводимые данные, являются ли они числом. Допустим если ввели "08098рррр9" - запросить повторный ввод, а если "43543"...

Проверка ввода - C++
Доброго вам времени суток. Бывалые, подскажите неопытному, как лучше писать? И если несложно, то скажите почему. for(;;) { ...

Проверка ввода - C++
Всем привет. Прошу обясните мне как зделать проверку вводимых даных. Мне нужно к примеру задать числовой масив типа (int). Как зделать так...

gets() проверка ввода - C++
возникло слабое звено в программке ... max_length = 100; line = new char; ... gets(line); ... вопрос такой: как...

Проверка правильности ввода - C++
Пишу программу С++ в консоле в RAD Studio. Программа представляет собой задачу. Пользователь вводит число, а программа решает. Мне нужно...

проверка ввода данных - C++
Добрые день! Нужна помощь Нужно осуществить проверку ввода. Имя. если пользователь ввел цифру в имени, выдавало "Try again" Код....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 00:06  [ТС]     Проверка ввода #16
easybudda, вы можете поправить код, что бы шла проверка???
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cctype>
#include <cstdlib>
using namespace std;
int oct_сhislo(unsigned long long int ch, int pos);
long DecToOct(unsigned long long int dec);
long OctToDec(unsigned long long int oct1);
unsigned long long int swap1=0,d,o,o_dec;
string s_oct; 
int ex=0;
bool st=true;
char ch1, var;
int main()
{
    setlocale(LC_ALL,"Russian");
    for (;;)
    {
      cout<<"1 - Перевести число з 8-рiчноi в 10-рiчну систему числення\n";
      cout<<"2 - Перевести число з 10-рiчноi в 8-рiчну систему числення\n";
      cout<<"0 - Вихiд з програми\n\n";
      cin>>var;
         switch(var)
         {
           case '1':
              s_oct="";
              system("cls");
              cout<<"Введiть число в 8-рiчнiй системi числення:  ";
              std::cin>>o;
              cout<<"\nЧисло в 8-рiчнiй системi числення - ";
              DecToOct(o); 
            break;           
           case '2':
               s_oct="";
              system("cls");
              cout<<"Введiть число в 10-рiчнiй системi числення:  ";
              std::cin>>d;
              cout<<"\nЧисло в 8-рiчнiй системi числення - ";
              DecToOct(d); 
             break;
           case '0':
             exit(0);
               break;
           default:
            cout<<"Помилка вибору!!!!";
             break;
        break;
         }
    system("cls");
    }
    return 0;
}
long DecToOct(unsigned long long int dec)
{   
    for (dec;dec>=1;)
       {     
            swap1=static_cast<int>(dec%8);
            std::ostringstream ost;
            ost<<swap1;
            s_oct+=ost.str();
            dec=dec/8;
            
       }
    std::string ss(s_oct);
    std::reverse(ss.begin(), ss.end());
    std::cout<<ss<<std::endl<<std::endl;
    return 0;
}
int oct_chislo(unsigned long long int ch, int pos)
{
    unsigned long long int div = 1;
    int i;
    for(i = 1; i < pos; ++i)
        div *= 10;
    return static_cast<int>((ch/div) % 10);
}
long OctToDec(unsigned long long oct1)
{   
    std::ostringstream sto;
    sto<<oct1;
    int n=(sto.str()).length();
    for(int i=1;i<n+1;++i)
    { 
      o_dec +=(oct_chislo(oct1,i))*pow(static_cast<double>(8),static_cast<int>(i-1));
    }cout<<o_dec<<endl;
    o_dec=0;
    return 0;
}
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
10.03.2010, 00:42     Проверка ввода #17
MILAN, я бы всё не так делал. Число должно читаться, как строка, а потом в соответствии с выбором меню проверяться на допустимые символы. Для восьмеричного числа это 0-7, для шестнадцатиричного 0-9a-f...
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 00:43  [ТС]     Проверка ввода #18
Приведите пожалуйста пример!!!
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
10.03.2010, 01:10     Проверка ввода #19
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
#include <iostream>
#include <string>
 
bool isOctNum(const std::string& s){
    static const std::string valid_chars("01234567");
    return s.find_first_not_of(valid_chars) == std::string::npos;
}
 
bool isHexNum(const std::string& s){
    static const std::string valid_chars("0123456789abcdefABCDEF");
    return s.find_first_not_of(valid_chars) == std::string::npos;
}
 
 
int main(){
    std::string buf;
    
    while ( true ){
        std::cout << "Number: ";
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        std::cout << "Is " << ( isOctNum(buf) ? "" : "not " ) << "valid oct number." << std::endl;
        std::cout << "Is " << ( isHexNum(buf) ? "" : "not " ) << "valid hex number." << std::endl;
    }
    
    return 0;
}
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 02:00  [ТС]     Проверка ввода #20
А как потом buf перевести в число???
Ivaneo
2 / 2 / 0
Регистрация: 01.08.2009
Сообщений: 16
10.03.2010, 06:39     Проверка ввода #21
Функцией atoi()
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 08:48  [ТС]     Проверка ввода #22
У меня значение unsigned long long int, atoi работает с int, если я не ошыбаюсь.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
10.03.2010, 09:08     Проверка ввода #23
Цитата Сообщение от MILAN Посмотреть сообщение
А как потом buf перевести в число???
Ну, если
Цитата Сообщение от MILAN Посмотреть сообщение
unsigned long long int swap1=0,d,o,o_dec;
то, наверное, вот этим...
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 15:52  [ТС]     Проверка ввода #24
Превидите пожалуста пример использования stoull.

Добавлено через 32 минуты
Не могу понять синтаксис.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
10.03.2010, 16:11     Проверка ввода #25
Цитата Сообщение от MILAN Посмотреть сообщение
Превидите пожалуста пример использования stoull.
Это очередное мелкософтовское чудо. У меня вот так только может быть:
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
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <string>
#include <cstdlib>
 
bool isOctNum(const std::string& s){
    static const std::string valid_chars("01234567");
    return s.find_first_not_of(valid_chars) == std::string::npos;
}
 
bool isHexNum(const std::string& s){
    static const std::string valid_chars("0123456789abcdefABCDEF");
    return s.find_first_not_of(valid_chars) == std::string::npos;
}
 
 
int main(){
    std::string buf;
    unsigned long long int val;
 
    std::cout << "Enter OCT value: ";
    std::cin >> buf;
    if ( isOctNum(buf) ){
        // val = std::stoull(buf, 0, 8); // MS VS version
        val = strtoull(buf.c_str(), NULL, 8);
        std::cout << "DEC value is: " << val << std::endl;
    }
    else
        std::cout << "Is not OCT value!" << std::endl;
 
    std::cout << "Enter HEX value: ";
    std::cin >> buf;
    if ( isHexNum(buf) ){
        // val = std::stoull(buf, 0, 16); // MS VS version
        val = strtoull(buf.c_str(), NULL, 16);
        std::cout << "DEC value is: " << val << std::endl;
    }
    else
        std::cout << "Is not HEX value!" << std::endl;
 
    return 0;
}
по-хорошему ещё на переполнение проверять ( errno == ERANGE )
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 16:19  [ТС]     Проверка ввода #26
какую библиотеку использует strtoull??? У меня чето не пашет.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
10.03.2010, 16:23     Проверка ввода #27
Цитата Сообщение от MILAN Посмотреть сообщение
какую библиотеку использует strtoull??? У меня чето не пашет.
Код
SYNOPSIS
     #include <stdlib.h>
     #include <limits.h>

     unsigned long
     strtoul(const char * restrict nptr, char ** restrict endptr, int base);

     unsigned long long
     strtoull(const char * restrict nptr, char ** restrict endptr, int base);
в С++ достаточно
C++
1
#include <cstdlib>
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 16:24  [ТС]     Проверка ввода #28
Почему тогда не пашет???
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
10.03.2010, 16:26     Проверка ввода #29
Цитата Сообщение от MILAN Посмотреть сообщение
Почему тогда не пашет???
Компилятор какой?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2010, 16:28     Проверка ввода
Еще ссылки по теме:

Проверка потока ввода - C++
Всем привет , возникла проблема , которая вызывает затруднения. #include &lt;iostream&gt; using namespace std; int...

Проверка корректности ввода - C++
****Сразу извините, что заголовок на английском, при попытке написать по русски, вылетала ошибка.**** День добрый. Решил, что пора учить...

Проверка языка ввода - C++
Вот часть кода. Что мне прописать в if, чтобы проверить условие. Если выбрана кириллица на клавиатуре, то писать эти буквы. Если другая, то...

Проверка правильности ввода - C++
Совсем запуталась.Надо ввести целое число. Как сделать так, чтобы при неправильном вводе(символ, буква), выдавалась ошибка?

Проверка ввода переменной - C++
Ребята) Создаю переменную типа int. Затем ввожу данные в консоли и присваиваю их переменной. Как проверить, были ли введены данные типа int...


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

Или воспользуйтесь поиском по форуму:
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
10.03.2010, 16:28  [ТС]     Проверка ввода #30
MS VS 2005
Yandex
Объявления
10.03.2010, 16:28     Проверка ввода
Ответ Создать тему
Опции темы

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