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

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

Войти
Регистрация
Восстановить пароль
 
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
#1

Ввод символов в соответствующий массив - C++

27.02.2014, 10:47. Просмотров 226. Ответов 7
Метки нет (Все метки)

Помогите, пожалуйста, разобраться - почему функция не отображает вводимые значения. Вот код:

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 "stdafx.h"
#include <iostream>
#include <memory.h>
using namespace std;
 
void m_c(char * pAr)
{
    int iCurInd = 0, iStep = 1, iSize = 1;
    char ch;
    cin.get(ch);
    while (ch != '\n')
    {
        pAr[iCurInd++] = ch;
        if (iCurInd == iSize)
        {
            char * pTemp = new char [iSize + iStep];
            memcpy (pTemp, pAr, sizeof(char)*iSize);
            delete [] pAr;
            pAr = pTemp;
            iSize += iStep;
            iStep = iSize/2;
        }
        cin.get(ch);
        if (ch == '\n')
            pAr[iCurInd] = '\0';
    }
}
int main()
{
    char * pAr = new char [1];
    m_c(pAr);
    cout << pAr << endl;
    delete [] pAr;
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 10:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввод символов в соответствующий массив (C++):

Ввод символов в массив - C++
Как ввести в массив 30 символов, которые будут вводить без пробелов и переносов строк, то есть строку вида: 123456789...n , нужно...

Организовать ввод символов в массив - C++
Привет всем. В ходе работы над лабораторной работой наткнулся на неприятную проблемку. В общем, есть структура. struct spisok { int...

Ограничение на ввод символов (разрешить ввод только цифр) - C++
Всем доброго времени суток! Я начал изучать С++ и у меня возник такой вопрос: Как ограничить ввод символов (разрешить ввод только...

Как настроить ввод русских символов и в дальнейшем вывод этих символов - C++
Подскажите как в этом коде настроить ввод русских символов и в дальнейшем вывод этих символов. Данный код выводит лишь всякую ерунду место...

Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) - C++
Помогите решить задачку: Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий...

Введите массив символов из 12 элементов. Удвоить все коды символов массива - C++
Условие :Введите массив символов из 12 элементов. Удвоить все коды символов массива. Заранее спасибо )

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2014, 23:20 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Указатель нужно по ссылке предавать, а не по значению, чтобы указатель, с изменённым в функции значением, можно было использовать в main():
C++
1
void m_c(char*& pAr);
1
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
28.02.2014, 00:14  [ТС] #3
alsav22, всё работает =) Только тогда можно ещё создать просто указатель в main() и в функции создать массив. Но это не основное. Спасибо, что помогли =)
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 00:21 #4
Цитата Сообщение от montkay Посмотреть сообщение
Только тогда можно ещё создать просто указатель в main() и в функции создать массив.
Тогда - это когда? Можно по разному. Например так:

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
char* m_c(char * pAr)
{
    int iCurInd = 0, iStep = 1, iSize = 1;
    char ch;
    cin.get(ch);
    while (ch != '\n')
    {
        pAr[iCurInd++] = ch;
        if (iCurInd == iSize)
        {
            char * pTemp = new char [iSize + iStep];
            memcpy (pTemp, pAr, sizeof(char)*iSize);
            delete [] pAr;
            pAr = pTemp;
            iSize += iStep;
            iStep = iSize/2;
        }
        cin.get(ch);
        if (ch == '\n')
            pAr[iCurInd] = '\0';
    }
    return pAr;
}
 
int main()
{
    char * pAr = new char [1];
    pAr = m_c(pAr);
    cout << pAr << endl;
    delete [] pAr;
    return 0;
}
1
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
28.02.2014, 09:47  [ТС] #5
alsav22, вот такой вариант ещё есть:

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
#include "stdafx.h"
#include <iostream>
#include <memory.h>
using namespace std;
 
void m_c(char * &pAr)
{
    int iCurInd = 0, iStep = 1, iSize = 1;
    char ch;
    if (pAr == nullptr)
    {
        pAr = new char [iSize];
        cin.get(ch);
        while (ch != '\n')
        {
            pAr[iCurInd++] = ch;
            if (iCurInd == iSize)
            {
                char * pTemp = new char [iSize + iStep];
                memcpy (pTemp, pAr, sizeof(char)*iSize);
                delete [] pAr;
                pAr = pTemp;
                iSize += iStep;
                iStep = iSize/2;
            }
            cin.get(ch);
            if (ch == '\n')
                pAr[iCurInd] = '\0';
        }
    }
    else
        cout << "Pointer is used...\n";
}
int main()
{
    char * pAr = nullptr;
    m_c(pAr);
    //cout << pAr << endl;
    delete [] pAr;
    return 0;
}
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 19:20 #6
Цитата Сообщение от montkay Посмотреть сообщение
вот такой вариант ещё есть:
Вариантов ещё много, но нужно определиться: в чём задача? В последнем коде непонятно: зачем, вообще, в main() объявляется указатель pAr? Только затем, чтобы освободить память под ним? Но это можно и в функции сделать (так же, как и объявить сам указатель). Выбор варианта зависит от поставленной задачи.
0
montkay
10 / 10 / 8
Регистрация: 19.02.2014
Сообщений: 72
28.02.2014, 21:34  [ТС] #7
alsav22, суть задания заключалась в том, чтобы создать строку самостоятельно, через свою функцию. Благодаря Вам я смог возвращать строку назад в main(). Это раньше у меня не получалось. А так всё сделано =) Я новичок, поэтому извините, если мои сообщения вызывают у Вас ещё больше вопросов. Мне кажется, что я разобрался в этом примере, а именно - нужно было указатель по ссылке передавать.
Указатель нужно по ссылке предавать
0
alsav22
28.02.2014, 21:57     Ввод символов в соответствующий массив
  #8

Не по теме:

Понял.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2014, 21:57
Привет! Вот еще темы с ответами:

Дан массив символов. Опеределить сколько в нем символов: *, ;, : - C++
#include &quot;stdafx.h&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; #include &quot;iostream&quot; using namespace std; int main() { ...

Ввод символов до точки С++ - C++
как можно огранизовать данную программу (ввод символов до точки ) кто может помочь?будьте добры

Запретить ввод символов - C++
Ребята, как поставить запрет на ввод символов в переменную j? #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #include...

Запретить ввод символов - C++
Привет. Подскажите нубу. В коде нудно запретить ввод символов. Запретить получилось, но код нарушился. Размер массива не учитывает и...


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

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

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