Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2015, 04:47   #1
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию Ограничение на ввод символов scanf() и cin

Здравствуйте.

Возможно ли ограничить ввод символов после вызова scanf() или cin?
Нужно чтоб после вызова этих функций пользователь мог ввести максимум 5 символов.

Заранее благодарен.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 06.07.2015, 05:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

У сканф можно задать формат %5s, у cin есть get, read с возможностью задать размер читаемого.
p51x вне форума Ответить с цитированием
Старый 06.07.2015, 08:47   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

а как и для чего ты будешь это использовать на практике?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.07.2015, 15:24   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
У сканф можно задать формат %5s, у cin есть get, read с возможностью задать размер читаемого.
Да, но это не совсем то, что нужно. Этим можно взять определенное кол-во символов, а нужно именно запретить ввод более 5 символов. Т.е. пользователь вводит 5 символов в консоль, а дальше, чтоб он не нажимал, строка не изменяется. При этом должна оставаться возможность редактирования этой строки из 5 символов.

Цитата:
Сообщение от min@y™ Посмотреть сообщение
а как и для чего ты будешь это использовать на практике?
Для пользователей стараюсь.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 06.07.2015, 15:33   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Для пользователей стараюсь.
я не это спрашивал.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.07.2015, 15:44   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Этим можно взять определенное кол-во символов, а нужно именно запретить ввод более 5 символов. Т.е. пользователь вводит 5 символов в консоль, а дальше, чтоб он не нажимал, строка не изменяется. При этом должна оставаться возможность редактирования этой строки из 5 символов.
Таки тогда читать по символу и если больше 5 символов и "не стрелки,делете", то давить эхо и откидывать символ.
p51x вне форума Ответить с цитированием
Старый 07.07.2015, 17:48   #7
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Сделал ограничение, которое хотел, вот код:
Код:
#include <wchar.h>
#include <locale.h>

int main(){

    setlocale(LC_ALL, "rus");

    const int strLength = 5;
    const int strSize = strLength + 1;

    wchar_t str[strSize];
    str[strLength]=0;

    wchar_t c;
    int count = 0;

    wprintf(L"Ввод строки на %d символов: ", strLength);

    do{
        c = _getwch();
        if( count < strLength ){

            if(iswprint(c)){
                printf("%lc",c);
                str[count++]=c;
            }
        }
        if(c=='\r'){
            if(count == strLength){
                printf("\n");
                break;
            }
        }
        if(c=='\b'){
            if(!count) continue;

            printf("\b \b");
            count--;
        }
    }while(1);

    wprintf(L"OK! Строка = %ls",str);


    return 0;
}
Вот только если бы можно было убрать тут setlocale(LC_ALL, "rus"), было бы вообще отлично. То все равно работаю с unicode.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевести программу на с++ т.е printf|scanf на cout |cin очень нужно Faridun Общие вопросы C/C++ 6 18.04.2013 22:54
перевести программу на с++ т.е printf|scanf на cout |cin очень нужно Faridun Visual C++ 0 16.04.2013 14:18
Ограничение на ввод символов в ячейку J-Max БД в Delphi 7 29.12.2010 13:30
Ограничение на ввод символов ANTI1 Общие вопросы Delphi 4 17.12.2008 16:30