27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
1

Не работает cin.getline(buf, 20);

15.01.2015, 16:09. Показов 2050. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи подскажите почему не работает cin.getline(buf, 20);? Проблема в том что я хочу ограничить ввод до 20 символов но оно не ограничивает. Весь поток копирует в буфер и потом ошибка.
Вот код
Кликните здесь для просмотра всего текста
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
void Archive::Set_car()
{
    if(size==0)
    {
        mas=new Car[1];
        size=1;
    }   
    else
    {
        Car* tmp=new Car[size+1];
 
        for(int i=0; i<size; i++)
        {
            tmp[i].make=new char[strlen(mas[i].make)+1];
            strcpy(tmp[i].make,mas[i].make);
            tmp[i].model=new char[strlen(mas[i].model)+1];
            strcpy(tmp[i].model,mas[i].model);
            tmp[i].spec=new char[strlen(mas[i].spec)+1];
            strcpy(tmp[i].spec,mas[i].spec);
            tmp[i].year=mas[i].year;
            tmp[i].id=mas[i].id;
            
        }
        for(int i=0; i<size; i++)
        {
            delete[] mas[i].make;
            delete[] mas[i].model;
            delete[] mas[i].spec;
        }
        delete[] mas;
 
        mas=tmp;
        size++;
    }
 
    char buf[20];
    
    cout<<"Enter make => ";
    cin.getline(buf,20);
    mas[size-1].make=new char[strlen(buf)+1];
    strcpy(mas[size-1].make,buf);
 
    cout<<"Enter model => ";
    cin.getline(buf,20);
    mas[size-1].model=new char[strlen(buf)+1];
    strcpy(mas[size-1].model,buf);
 
    cout<<"Enter spec => ";
    cin.getline(buf,20);
    mas[size-1].spec=new char[strlen(buf)+1];
    strcpy(mas[size-1].spec,buf);
 
    cout<<"Enter a year => ";
    cin>>mas[size-1].year;
 
    mas[size-1].id=size;
 
    cin.ignore();
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2015, 16:09
Ответы с готовыми решениями:

Что делает цикл "while(cin.getline(buf,l_buf))" ?
не могу понять,что делает цикл:while(cin.getline(buf,l_buf))-это по сути проверка на ввод строки?...

Как работает f.getline(buf, MAX_LEN, '\n') ?
Я так понимаю, что buf - куда мы считываем, MAX_LEN сколько считываем, а что значит '\n' (я знаю,...

Не работает ни cin.Get(), ни cin.Getline()
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; #include...

Не работает cin.getline
#include &lt;iostream&gt; int main() { using namespace std; char name,name2;...

9
7640 / 6447 / 2941
Регистрация: 14.04.2014
Сообщений: 28,111
15.01.2015, 16:17 2
На первом же getline() ошибка?
Тебе в любом случае придётся удалять остаток символов перед последующим вводом.
1
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
15.01.2015, 16:19  [ТС] 3
nmcf, cin.ignore()? пробовал не работает. Если не оно то как подскажи пжл.
0
7640 / 6447 / 2941
Регистрация: 14.04.2014
Сообщений: 28,111
15.01.2015, 16:37 4
Лучший ответ Сообщение было отмечено Mikhail1990 как решение

Решение

sync() некоторые используют.
1
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
15.01.2015, 17:05  [ТС] 5
Решено кому надо

Кликните здесь для просмотра всего текста
C++
1
2
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');


вставить после cin.getline();
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
15.01.2015, 17:20 6
ну, или как-то так:
C++
1
2
while(cin.get() != '\n')
;
меньше букв)
1
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
15.01.2015, 17:39  [ТС] 7
mss307, спасибо работает

Добавлено через 15 минут
Цитата Сообщение от Mikhail1990 Посмотреть сообщение
mss307, спасибо работает
беру слова обратно! не работает
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
15.01.2015, 17:53 8
хм,
C++
1
cin.clear();
должно быть надо добавить перед циклом.
0
27 / 26 / 6
Регистрация: 22.03.2014
Сообщений: 277
15.01.2015, 17:57  [ТС] 9
mss307,
C++
1
2
cin.clear();
    cin.sync();
вот что решает ВСЕ проблемы, с прошлым моим вариантом если строка меньше размера буфера то надо жать дополнительно ентер. А так все нормально работает.
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
15.01.2015, 17:58 10
Mikhail1990, ну, вот и хорошо)
0
15.01.2015, 17:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2015, 17:58
Помогаю со студенческими работами здесь

cin.getline как работает?
Здравствуйте, в моей программе я столкнулся с некоторой проблемой. В переменную place я хочу...

cin.getline работает через раз
вот этот код работает прекрасно #include &lt;iostream&gt; using namespace std; void Open_Directory()...

Не работает. cin.getline(string,200);
Я создаю проект. Все работает кроме одного cin.getline(string,200), почему? Когда запускаю этот...

Не работает getline(cin,s), istream.ignore()
Использую microsoft visual c++ 6.0. не работает: string s; getline(cin,s);//дважды приходиться...

C++ проблема с вводом, getline(cin, *p) не работает
В общем есть вот такой вот код, я хочу, что бы ввод названия компании шел после ввода диаметра, но...

Cin.getline() не работает при динамическом выделении памяти
Почему в таком коде cin.getline() работает не так как надо? Если очистить поток, то будет все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru