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

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

10.12.2017, 23:26. Показов 3097. Ответов 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
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
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
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru