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

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

Восстановить пароль Регистрация
 
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:06     использую cin.getline() для заполнения динамического массива, и шляпа #1
делал задачку в теме ниже, типа заменить в строке символ ":" на ";", решил сделать при помощи динамического массива, размер которого вначале вводится при помощи 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() для заполнения динамического массива, и шляпа
Посмотрите здесь:

getline(cin, str) и cin>> C++
C++ Ошибка заполнения динамического двумерного массива
C++ Отличие функции cin.get и cin.getline
C++ Можно ли использовать cin.getline для указателя типа char*
cin.getline и cin.ignore C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
17.09.2013, 22:09     использую cin.getline() для заполнения динамического массива, и шляпа #2
C++
1
2
3
4
    int m;
    a=new char[m];
    cout<<"Enter size line"<<endl;
    cin>>m;
ты вначале выделяешь память под Одному Великому Компилятору известно сколько char, а потом уже вводишь m
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:13  [ТС]     использую cin.getline() для заполнения динамического массива, и шляпа #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
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
17.09.2013, 22:24     использую cin.getline() для заполнения динамического массива, и шляпа #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...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:27  [ТС]     использую cin.getline() для заполнения динамического массива, и шляпа #5
пасиб, заработало, ща погуглю про cin.sync(); // дзын-н-нь
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2013, 22:29     использую cin.getline() для заполнения динамического массива, и шляпа #6
dzrkot, вот так, всегда, не помешает:
C++
1
(cin >> m).get();
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
17.09.2013, 22:33  [ТС]     использую cin.getline() для заполнения динамического массива, и шляпа #7
Цитата Сообщение от alsav22 Посмотреть сообщение
dzrkot, вот так, всегда, не помешает:
C++
1
(cin >> m).get();
а как трактовать эту строчку?o_0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2013, 22:42     использую cin.getline() для заполнения динамического массива, и шляпа
Еще ссылки по теме:

C++ Cin вместо cin.getline
C++ Не работает ни cin.Get(), ни cin.Getline()
Отличие getline() от cin.getline() C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.09.2013, 22:42     использую cin.getline() для заполнения динамического массива, и шляпа #8
Цитата Сообщение от dzrkot Посмотреть сообщение
а как трактовать эту строчку?
Всё равно, что:
C++
1
2
cin >> m;
cin.get(); // извлечёт '\n' (который мешает работе getline()) из потока
Yandex
Объявления
17.09.2013, 22:42     использую cin.getline() для заполнения динамического массива, и шляпа
Ответ Создать тему
Опции темы

Текущее время: 19:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru