Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
5 / 5 / 1
Регистрация: 20.11.2017
Сообщений: 51

Для чего испоьзовать clear() перед getline()?

10.12.2017, 23:26. Показов 3058. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, вопрос следующий:
Пользуюсь getline() в двух местах для считывания определенного кол-ва символов с клавы в буфер (ограничение).

В первом случае все норм (из введенных 20-ти символов, записываются только 15), но при втором вводе (Enter mask), курсор просто проскакивает эту строчку и в результате в маску не записывается ничего! Но это лишь в том случае, если мы при первом вводе (Enter IP )превысили 15 символов. Как вылечить - нашел, нужно вставить cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
- для чистки буфера, но как это помогает? почему без очистки буфера он Enter MASK перескакивает? Может кто-нибудь детально объяснить?


Листинг:
1ВВОД
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Ent_ip(char pIP[16],int oct[]){
    int j=0;
    cout<<"Enter IP-adress: ";
cin.getline(pIP,16);// protect input on 15 chars - \0
    char* p=strtok(pIP,".\0"); //
    while(p!=0){
        j=j++;
          if(j==1)
            oct[0]=atoi(p);
          if(j==2)
            oct[1]=atoi(p);
          if(j==3)
            oct[2]=atoi(p);
          else
            oct[3]=atoi(p);
            p=strtok(0,".\0");
}
    delete []pIP;//clear dinamic memory
}

2 ВВОД:
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
void Ent_msk(char pMASK[],int octm[],unsigned int *c){
    int j=0;
    cout<<"Enter Subnet Mask: ";
    [B] cin.clear();
     cin.ignore(cin.rdbuf()->in_avail());[/B]
cin.getline(pMASK,16);// protect input on 15 chars - \0
    char* p=strtok(pMASK,".\0");
    while(p!=0){
        j=j++;
          if(j==1)
            octm[0]=atoi(p);
          if(j==2)
            octm[1]=atoi(p);
          if(j==3)
            octm[2]=atoi(p);
          if(j==4)
            octm[3]=atoi(p);
            p=strtok(0,".\0");
    }
    for(int i=0;i<4;i++){
        j=octm[i];
    calc(j,&c);// call calc quantity 1 bits in mask 
 
    }
delete []pMASK;// clear memory
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2017, 23:26
Ответы с готовыми решениями:

Для чего служит обозначение L перед строковым литератом
Вот код #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { wcin.imbue(locale(&quot;.866&quot;)); ...

Пустота перед clear:both
Всем привет. При верстке часто сталкиваюсь с проблемой, когда при установке элемента со свойством clear:both для отмены обтекания перед...

Для чего нужны точки перед именами функций?
Для чего нужны точки перед именами функций? Set xmlRequest = .CreateXMLDoc(&quot;get&quot;)

2
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
11.12.2017, 07:35
После чтения 15 символов указатель потока стоит на 16-м символе и при последующем чтении передастся остальная часть строки.
Чтобы этого не произошло, этот остаток удалить из потока.
0
5 / 5 / 1
Регистрация: 20.11.2017
Сообщений: 51
11.12.2017, 13:36  [ТС]
В принципе понятно, но вот если я не очищу остаток из потока, то при последующем чтении, как Вы написали, этот остаток будет в pMASK, но когда я после
Цитата Сообщение от prado777 Посмотреть сообщение
cin.getline(pMASK,16);// protect input on 15 chars - \0
ставлю строку
C++
1
cout<<pIP<<endl;
- то там нет никакого остатка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.12.2017, 13:36
Помогаю со студенческими работами здесь

для чего используется знак $ перед функциями и переменными?
для чего используется знак $ перед функциями и переменными? вот например код $(function() { var canvas_bg =...

Md5sum. Для чего пишется '*' перед именем хэшируемого файла
Добрый день. Для чего пишется '*' перед именем хэшируемого файла. Как можно избавиться от '*'.

Для чего в inline функциях,перед знаком / и степенями стоят точки?
Для чего в inline функциях,перед знаком / и степенями стоят точки?(например:inline(((acos(2*x+2)).^2)./2))))

Для чего используют знак "*" перед свойством в css
Привет всем форумчанам! Недавно заметил в стилях у одного сайта вот такое: .navbar { *position: relative; *z-index: 2; ...

Для чего ставится "@" перед меткой?
скажите пожалуйста, а для чего мы ставим @ перед меткой, иногда даже две? в каких случаях можно этого не делать?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru