Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
1

Проверка ввода

16.04.2010, 23:47. Просмотров 9364. Ответов 48
Метки нет (Все метки)

Всем привет. Прошу обясните мне как зделать проверку вводимых даных. Мне нужно к примеру задать числовой масив типа (int). Как зделать так чтоб когда пользователь вводит к примеру Ф123;:87!"№;;%:!"№;%:?*(99321фвфв и тд.. или что нить подобное после проверки попросить повторить ввод даного елемента масива(или числа)?
Я находил в темах немного подобное моему примеру но не смог розобратса, покажыте пожалуста как ето зделать и если можна то в Borland C++.
Зарание спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2010, 23:47
Ответы с готовыми решениями:

Visual C++ проверка ввода на число, проверка на кирилицу
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. ...

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

Проверка ввода
Доброго вам времени суток. Бывалые, подскажите неопытному, как лучше писать? И если несложно,...

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

48
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
22.04.2010, 21:57  [ТС] 41
Цитата Сообщение от NNN777 Посмотреть сообщение
Понимаю, что уже поздно... но, все же вот еще вариант :
Конструктивная критика приветствуется
твоя проверка вовсе не работа ввожу буквы и прога виснет
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
22.04.2010, 22:47 42
Сейчас нет возможности еще раз проверить, но у меня отлично работала - сначала вводишь число элементов, а потом сами элементы, они-то и проверяются на тип данных... может, потому что моя прога VS написана...
0
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
22.04.2010, 22:56  [ТС] 43
Цитата Сообщение от NNN777 Посмотреть сообщение
Сейчас нет возможности еще раз проверить, но у меня отлично работала - сначала вводишь число элементов, а потом сами элементы, они-то и проверяются на тип данных... может, потому что моя прога VS написана...
Да прошу прощения проверка почти работа
токо в проге не предусмотрено 1 вещь
когда пользователь нечево не вводит а просто нажыме ентер то масиму приспаютса бог зна какие значения нужна чтоб прога ждала пока пользователь не введет значение)
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
23.04.2010, 09:45 44
Цитата Сообщение от Morfiy Посмотреть сообщение
токо в проге не предусмотрено 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
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
#include <iostream>
#include <cstdlib>
#include <math.h>
#include <locale.h>
int proverka (char *b);
 
using namespace std;
 
const int SIZE=100;
 
int main() 
{
    setlocale(LC_ALL,"Russian");
    int n,k=0,d,a[SIZE],t=0;
    char b[SIZE];
 
    cout<<"Vvtdite n: ";
    cin>>n;
    cin.ignore(SIZE, '\n');
    
    for (int i=0; i<n; i++)
    {
        cout<<"Ведите ["<<i+1<<"] элемент массива: ";
m:
        cin.getline(b, SIZE);
        t=proverka(b);
        if (t<0)
        {
            cout<<"Ошибка ввода!\n";
            i--;
        }
        else 
        {
            if(t==0&&*b!='0')
                while (t==0)
                    goto m;
            else
                a[k++]=t;
        }
    }
    cout<<"Rezultat: ";
    for (int i=0; i<k; i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
int proverka (char *b)
{
    int d=0, n, k=0;
    char *b1=b;
    d=strlen(b);
    while(*b1)
    {
        if (*b1>='0'&&*b1<='9')
            k+=1;
        b1++;
    }
    if (k==d)
    {
        n= atoi (b);
        return n;
    }
    else 
        return -1;
}
0
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
23.04.2010, 11:11  [ТС] 45
Цитата Сообщение от NNN777 Посмотреть сообщение
Точно! Спасибо, что заметили.
Вот исправленная версия программы, но не знаю, насколько она удачна
если я правильно понял как работа твоя проверка
то она когда вводитса неверное значение сохраняет пиременной -1 и потом идет проверка если введено менше 0 то выбивает ошыбку но всетаки если так подумать то пользователь может вводить отрицательные числа ,ты смож переделать так чтоб з отрицательными и дробовыми числами?
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,283
23.04.2010, 11:51 46

раз такое дело, то вот с минусом и плавающей точкой
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
#include <iostream>
#include <conio.h>
 
void enter(float&);
 
void main(){            
        float x;
        enter(x);
    std::cout << std::endl << x << std::endl;
    system("pause");
}
 
void enter(float &X){
        bool flag = true;
    bool point = true;
        int i = 0;
    char c = 0, x[15];
    x[0] = true;
                
        while(flag == true){
                c = getch();
                if(c == 8){
            if(x[i] != true){
                if(x[i-1] == '.')
                    point = true;
                std::cout << "\b \b";
                x[(i--)-1] /= 10;
            }
            if(i == 0)
                 x[i] = true;
                }
                if(c >= '0' && c <= '9'){
            x[i] = c;
            std::cout << x[i];
                        i++;
                }
        if(c == 45){
            if(x[0] == true){
                i++;
                x[0] = c;
                std::cout << x[0];
            }
        }
        if(c == 46){
            if(point == true){
                point = false;
                x[i] = c;
                std::cout << x[i];
                i++;
            }
        }
                if(c == 13 && x[i] != true)
            flag = false;
        }
    X = atof(x);
    if(X == -0)
        X = 0;
}
0
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
23.04.2010, 12:39  [ТС] 47
Цитата Сообщение от Vorona Посмотреть сообщение
раз такое дело, то вот с минусом и плавающей точкой
ну я для розпознание точки и минуса всеволиш изминилчуть и оно работа
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
void enter1(float &X){
        bool flag = true;
        int i = 0;
        char c = 0, x[10];
        x[0] = 'x';
 
        while(flag == true){
                c = getch();
                if(c == 8){
                        if(x[i] != 'x'){
                                cout << "\b \b";
                                x[(i--)-1] /= 10;
                        }
                        if(i == 0)x[i] = 'x';
                }
                if(c >= '0' && c <= '9'||c=='-'||c=='.'){
                        x[i] = c;
                        cout << x[i];
                        i++;
                }
                if(c == 13 && x[i] != 'x')
                flag = false;  }
        X = atof(x);
        }
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,283
23.04.2010, 19:18 48
я просто сделал проверку, что бы нельзя было вводить точку или минус больше одного раза и минус можно ввести только вначале, ну и если вводим -0, то чтоб ответ был просто 0, а не -0, ну это просто для красоты
0
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
23.04.2010, 19:34  [ТС] 49
Цитата Сообщение от Vorona Посмотреть сообщение
я просто сделал проверку, что бы нельзя было вводить точку или минус больше одного раза и минус можно ввести только вначале, ну и если вводим -0, то чтоб ответ был просто 0, а не -0, ну это просто для красоты
большое спасибо тепер препод к вводу больше некогда не придеретса
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2010, 19:34

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Проверка ввода
Здравствуйте, помогите, пожалуйста, написать функцию для обработки неправильного ввода символов....

Проверка ввода
Как ограничить ввод символов в программе!!!! На каждый символ, который был введен выдавать...

Проверка ввода
Здравствуйте! Не нашёл тему, где могут задавать простые вопросы начинающие(если есть такая,...


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Опции темы

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