Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
#1

использую cin.getline() для заполнения динамического массива, и шляпа - C++

17.09.2013, 22:06. Просмотров 1030. Ответов 7
Метки нет (Все метки)

делал задачку в теме ниже, типа заменить в строке символ ":" на ";", решил сделать при помощи динамического массива, размер которого вначале вводится при помощи m, потом функцией cin.getline() заполняю массив, но прога перепрыгивает через getline сразу в конец, а если закомментить cin>>m; и присвоить m какую-нибудь константу, то getline работает и можно норм заполнить массив, с чем это мб связано?

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;
int main()
{
    int m;
    char *a;
    int counter=0;
    a=new char[m];
    cout<<"Enter size line"<<endl;
    cin>>m;
    cout<<"Enter value line"<<endl;
    cin.getline(a,m);
    for (int i=0;i<m;i++)
    {
        cout<<a[i]<<endl;
        if (a[i]==':')
        {
            a[i]=';';
            counter++;
        }
    }
for (int i=0;i<m;i++)
    {
    cout<<a[i];
    }
cout <<"counter = "<<counter<<endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2013, 22:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос использую cin.getline() для заполнения динамического массива, и шляпа (C++):

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода - C++
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть какие-нибудь замечания, то просьба написать что не...

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами - C++
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с тремя параметрами, как из потока достать...

Отличие функции cin.get и cin.getline - C++
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get считывает символ разрыва строк и оставляет...

Можно ли использовать cin.getline для указателя типа char* - C++
Вот к примеру код он работает, но при отладке Ошибка доступа. #include &lt;iostream&gt; using namespace std; struct EXAMPLE{char* pName;...

Отличие getline() от cin.getline() - C++
Чем отличается getline() от cin.getline() ?

cin.getline и cin.ignore - C++
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый символ начиная со второго входа в for....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
17.09.2013, 22:09 #2
C++
1
2
3
4
    int m;
    a=new char[m];
    cout<<"Enter size line"<<endl;
    cin>>m;
ты вначале выделяешь память под Одному Великому Компилятору известно сколько char, а потом уже вводишь m
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
17.09.2013, 22:13  [ТС] #3
Цитата Сообщение от SummerRain Посмотреть сообщение
C++
1
2
3
4
    int m;
    a=new char[m];
    cout<<"Enter size line"<<endl;
    cin>>m;
ты вначале выделяешь память под Одному Великому Компилятору известно сколько char, а потом уже вводишь m
да да, меня уже подправили...кстати оно на это внимания не обращало...
Исправил, и добавид delete[] a;
но результат тот же=(
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
17.09.2013, 22:24 #4
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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
using namespace std;
int main()
{
    int m;
    char *a;
    int counter=0;
    
    cout<<"Enter size line"<<endl;
    cin>>m;
    a=new char[m];
    cout<<"Enter value line"<<endl;
    cin.sync();  // дзын-н-нь
    cin.getline(a,m);
    for (int i=0;i<m;i++)
    {
        cout<<a[i]<<endl;
        if (a[i]==':')
        {
            a[i]=';';
            counter++;
        }
    }
    for (int i=0;i<m;i++)
    {
        cout<<a[i];
    }
    cout <<"counter = "<<counter<<endl;
    system("pause>0");
 
    return 0;
}
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
17.09.2013, 22:27  [ТС] #5
пасиб, заработало, ща погуглю про cin.sync(); // дзын-н-нь
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2013, 22:29 #6
dzrkot, вот так, всегда, не помешает:
C++
1
(cin >> m).get();
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
17.09.2013, 22:33  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
dzrkot, вот так, всегда, не помешает:
C++
1
(cin >> m).get();
а как трактовать эту строчку?o_0
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2013, 22:42 #8
Цитата Сообщение от dzrkot Посмотреть сообщение
а как трактовать эту строчку?
Всё равно, что:
C++
1
2
cin >> m;
cin.get(); // извлечёт '\n' (который мешает работе getline()) из потока
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 22:42
Привет! Вот еще темы с ответами:

Cin вместо cin.getline - C++
#include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace std; int get_int(int default_value); char name; ...

Не работает ни cin.Get(), ни cin.Getline() - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; #include &quot;string.h&quot; using namespace::std; const...

getline(cin, str) и cin>> - C++
Добрый день. Есть код: ... string str; int N; cin&gt;&gt; N; getline(cin, str); cout&lt;&lt;str&lt;&lt;endl; //Выводит: &lt;пустота&gt; ...

Ошибка заполнения динамического двумерного массива - C++
При заполнении массива mas происходит выход за границы массива. По ходу исполнения программы данные записываются в ячейки и т.д. Судя по...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.09.2013, 22:42
Ответ Создать тему
Опции темы

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