Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.96
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
#1

Защита от ввода букв - C++

15.05.2012, 16:44. Просмотров 5219. Ответов 18
Метки нет (Все метки)

Всем привет.
Необходимо сделать защиту от ввода букв. числа не больше 40.
C
1
2
3
4
5
6
7
8
9
int size;
do
    {
    printf("\nВведите размер массива (не более 40): ");
    scanf("%d",&size);
    if(size<40)break;
    puts("\nВы задали размер больше 40, повторите попытку");
    }
    while(1);
пробовал использовать fflush, вроде получалось - при вводе буквы ввод появлялся заново, но при этом не получалось сделать условие, что меньше 40.
Прошу помочь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2012, 16:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Защита от ввода букв (C++):

Защита от ввода букв - C++
Нужно в программу вставить защиту от ввода букв. Что то у меня не получается. (В программе вводится только цифра) #include...

Защита от ввода цифр/букв - C++
Всем доброго времени суток! Написал вот такую программу #include&lt;iostream&gt; #include&lt;string&gt; using namespace std; const int N =...

Защита ввода. - C++
Как защитить размер матрицы от набора букв или символов?

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

Защита от некорректного ввода - C++
Помогите, пожалуйста, с защитой от некорректного ввода! Программа выполняет задания с помощью рекурсии. Хотел написать защиту на ввод...

Защита от ввода символов - C++
есть код в котором я ввожу цифры нужно сделать что бы через консоль я не могу вводить больше ничего другого кроме цифр возможно такое...

18
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
15.05.2012, 16:49 #2
C++
1
2
3
4
5
6
7
8
int size=0;
printf("\nВведите размер массива (не более 40): ");
scanf("%d",&size);
while((size<=0)||(size>40))
{
puts("\nВы задали размер больше 40, повторите попытку");
scanf("%d",&size);
}
Вроде так.
0
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
15.05.2012, 16:52  [ТС] #3
У вас так же как и у меня, просто ввод цифр, стоит ввести буквы и зацикливается
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
15.05.2012, 17:10 #4
Мне казалось, что ввод буквы и энтер scanf просто проигнорирует... Если нет, тогда не знаю...
0
rakota
35 / 35 / 1
Регистрация: 05.02.2012
Сообщений: 76
15.05.2012, 17:14 #5
Я мог бы вам посоветовать использовать функции ввода/вывода в стиле C++, а именно
C++
1
2
std::cout << "...";
std::cin >> size;
Если будет введена не цифра, то size примет значение равное нулю:
C++
1
2
3
4
if (size)
{
//была введена не буква, проводим другие проверки...
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
15.05.2012, 17:17 #6
almostclever, безопасному вводу посвящён целый блог http://www.cyberforum.ru/blogs/34326/blog279.html
1
-=ЮрА=-
Заблокирован
Автор FAQ
15.05.2012, 17:23 #7
almostclever, вот код обеспечивающий полную безопасность ввода инта + извещающий о неверном вводе и его причинах
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 <stdio.h>
#include <string.h>
 
int main()
{
    int param    = 0;
    char inpStr[1024];
    char bufStub = 0;
    while(1)
    {
        bufStub = 0;
        printf("Enter int : ");
        if((!scanf("%1023[^\n]%c",inpStr,&bufStub)) || bufStub != '\n')
        {
            if(printf("Empty input\n"))
                getchar();
        }
        else
        if(32 < strlen(inpStr))
            printf("Input is too large\n");
        else
        if(!sscanf(inpStr,"%d%c",&param,&bufStub) || bufStub != '\n')
            printf("Errors in input(input contains alphas or has unsupported format)\n");
        else
            printf("Your input %d\n",param);
    }
    return 0;
}
2
Миниатюры
Защита от ввода букв  
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
15.05.2012, 17:52  [ТС] #8
Большое спасибо
Переделал на свой лад, так как не требуется такая сложность обработки:
C
1
2
3
4
5
6
7
8
9
10
11
do
    {
        printf("\nВведите размер массива (не более 40): ");
        scanf("%s",inpStr);
        if(!sscanf(inpStr,"%d",&size))
            printf("\nВведите цифры");
        else
            if(size<40)break;
            puts("\nВы ввели неправильный параметр, повторите попытку");
    }
    while(1);
0
-=ЮрА=-
Заблокирован
Автор FAQ
15.05.2012, 17:57 #9
Цитата Сообщение от almostclever Посмотреть сообщение
маленько переделал на свой лад:
- а теперь введи пустую строку, т.е нажми Enter сразу без ввода числа. Хотябы уж гетчар введи. Мой код больше твоего не потому что заумно написано, а потому что он учитывает все возможные ошибки ввода - пустой ввод, буква, слишком большое значение
0
almostclever
1 / 1 / 0
Регистрация: 04.03.2012
Сообщений: 101
15.05.2012, 18:01  [ТС] #10
Я понимаю это все, и это все клева и нужно, но для моей задачи требуется минимум.
Длину пусть какую угодно вводят, все равно если будет больше 40, то цикл повторится.
А вот насчет пустого, да согласен, добавлю. Еще раз спасибо.
0
SuperMario
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 3
03.01.2013, 20:37 #11
-=ЮрА=- , отдельное спасибо за код, долго искал то что нужно и твой вариант мне полносnью подошел! Только в моем случае нужно было запретить ввод больше одного числа, я изменил 32 в этом кусочке кода на 1 и полностью решил свою проблему:
C++
1
2
if(1 < strlen(inpStr))
            printf("Input is too large\n");
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.01.2013, 20:51 #12
SuperMario, покажи полный код, просто хочу увидеть что ты ничего не упустил

Не по теме:

PS:А вот это радует!

Цитата Сообщение от SuperMario Посмотреть сообщение
-=ЮрА=- , отдельное спасибо за код, долго искал то что нужно и твой вариант мне полносnью подошел!
Люблю когда люди понимают что им хочу донести

0
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
03.01.2013, 21:01 #13
-=ЮрА=-, а почему вы использовали в свём примере scanf/printf? Потому что автору так надо? Просто мне кажется при помощи cin/cout тут удобнее можно сделать.
0
-=ЮрА=-
Заблокирован
Автор FAQ
03.01.2013, 21:06 #14
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
-=ЮрА=-, а почему вы использовали в свём примере scanf/printf? Потому что автору так надо? Просто мне кажется при помощи cin/cout тут удобнее можно сделать.
- во превых да писал под Си, во вторых код позволяет фиксировать пустой ввод. По поводу плюсов - собственно буквально вчера выложил код на С++ через функцию-шаблон в своём блоге Безопасный ввод через функцию-шаблон
1
ZaMaZaN4iK
Мой лучший друг-отладчик!
164 / 164 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
03.01.2013, 21:26 #15
посмотрел Ваш код.такой код сейчас в учебнике пару недель назад читал.(Язык программирования С++.Лекции и упражнения.Стивен Прата).Только там поток ввода очищался не при помощи cin.sync(), а при помощи простого цикла
C++
1
2
3
4
5
6
if(!cin>>some_number)
{
      cin.clear();
      while(cin.get() != '\n')
            continue;
}
Но ваш способ покрасивее.надо будет взятьна заметку.Спасибо за запись.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2013, 21:26
Привет! Вот еще темы с ответами:

Защита от неправильного ввода - C++
Приветствую, делаю контрольную работу по программированию, основное задание сделал, но вот решил добавить защиту от неправильного ввода, но...

Защита от некорректного ввода - C++
Приветствую, помогите, пожалуйста, реализовать защиту от некорректного ввода. Должны быть допустимы только числовые значения. double...

Защита от некорректного ввода - C++
Будьте добры, помогите написать защиту от дурака на ввод массива элементы которого тип float Буду очень благодарен.

Защита от некорректного ввода - C++
Подскажите пожалуйста как доработать защиту от некорректного ввода: // ConsoleApplication4.cpp : Defines the entry point for the console...


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

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

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