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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
#1

Ввод двумерного динамического массива с консоли - C++

24.04.2013, 17:54. Просмотров 1769. Ответов 31
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста, мне нужно ввести с консоли двумерный массив, мне известна максимальная длинна строки, но я не знаю максимальное количество этих строк. Как я понимаю нужно выделять память под строки по мере ввода, если я правильно понимаю то это можно сделать как-то с помощью malloc,realloc только хз как.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2013, 17:54     Ввод двумерного динамического массива с консоли
Посмотрите здесь:

Ввод-вывод двумерного динамического массива - C++
Здраствуйте. Задана задача, в ходе которой нужно ввести динамический массив(каждый елемент с новой строчки), а затем вывести его уже как...

Cоздание двумерного динамического массива - C++
как задать двумерный массив , границы которого m и n вводятся с клавиатуры? для одномерного массива есть команда int *a=new int; ...

Использование двумерного динамического массива - C++
Здравствуйте, уважаемые форумчане. Такой вопрос: я объявил двумерный дин. массив, выделил, память, сделал с ним что-то int **arr =...

Использование динамического двумерного массива - C++
Вот есть такой заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H template<typename TT> ...

Массив: создание динамического двумерного массива - C++
Создаю двумерный динамический массив. После ввода m n - конец программы. Помогите, пожалуйста. # include <iostream> using namespace...

Максимальный элемент динамического двумерного массива - C++
Напишите пожалуйста программу которая находила бы максимальный элемент динамического двумерного массива

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
25.04.2013, 02:53  [ТС]     Ввод двумерного динамического массива с консоли #16
ой всё понял ошибку)
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2013, 02:54     Ввод двумерного динамического массива с консоли #17
И вообще, используй теги для кода. Ничего же не видно...
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
25.04.2013, 03:07  [ТС]     Ввод двумерного динамического массива с консоли #18
Блин если честно не могу тут найти тэги.
Вот опять проблема с кодом, хотел очистить память, занятую под массив указателей на строки, но почему то не получилось, ввожу первую строку вроде всё нормально, но после ввода второй строки вылетает ошибка
Кликните здесь для просмотра всего текста

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>;
using namespace std;
int main()
 
{   setlocale(LC_ALL, "Russian");
    char **newArr = NULL;
    int x = 101,y = 1,lastY=0;
 
 
    while (true)
    {  
        char **Arr = new char*[y];
        for (int i=0; i<y; i++)
            Arr[i] = new char[x];
        cin.getline(Arr[lastY],x);
        if(strcmp(Arr[lastY],"")==0){break;}
        for (int i = 0; i<lastY; i++)
            Arr[i] = newArr[i];
        newArr = new char*[y];
        for (int i=0; i<y; i++)
            newArr[i] = Arr[i];
        lastY=y;
        y++;
        for(int i = 0; i<lastY; i++)
        delete(Arr[i]);
        delete(Arr);
    }
    y--;
    system("pause");
    return 0;
}
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
25.04.2013, 07:25     Ввод двумерного динамического массива с консоли #19
Цитата Сообщение от emmure Посмотреть сообщение
Блин если честно не могу тут найти тэги.
C++
1
2
3
for(int i=0; i<size; i++)
    cout<<a[i]<<"\t";
//and other code
Миниатюры
Ввод двумерного динамического массива с консоли  
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
25.04.2013, 08:02  [ТС]     Ввод двумерного динамического массива с консоли #20
спасибо

Добавлено через 1 минуту
но вопрос остаётся открытым почему выдаёт ошибку
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
#include <iostream>;
using namespace std;
int main()
 
{ setlocale(LC_ALL, "Russian");
char **newArr = NULL;
int x = 101,y = 1,lastY=0;
while (true)
{ 
    char **Arr = new char*[y];
    for (int i=0; i<y; i++)
        Arr[i] = new char[x];
    cin.getline(Arr[lastY],x);
    if(strcmp(Arr[lastY],"")==0){break;}
    for (int i = 0; i<lastY; i++)
        Arr[i] = newArr[i];
    newArr = new char*[y];
    for (int i=0; i<y; i++)
        newArr[i] = Arr[i];
    lastY=y;
    y++;
    for(int i = 0; i<lastY; i++)
        delete(Arr[i]);
    delete(Arr);
}
y--;
system("pause");
return 0;
}
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
25.04.2013, 08:08     Ввод двумерного динамического массива с консоли #21
Цитата Сообщение от emmure Посмотреть сообщение
но вопрос остаётся открытым почему выдаёт ошибку
здесь???

Цитата Сообщение от emmure Посмотреть сообщение
delete(Arr[i]);
* * delete(Arr);
наверно надо написать так
C++
1
2
delete[] Arr[i];
delete[] Arr;
зачем это
Цитата Сообщение от emmure Посмотреть сообщение
y--;
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
25.04.2013, 09:21  [ТС]     Ввод двумерного динамического массива с консоли #22
Цитата Сообщение от ValeryS Посмотреть сообщение
здесь???



наверно надо написать так
C++
1
2
delete[] Arr[i];
delete[] Arr;
зачем это
C++
1
2
delete[] Arr[i];
delete[] Arr;
разницы нету
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
20.05.2013, 17:53  [ТС]     Ввод двумерного динамического массива с консоли #23
Здравствуйте. Нужна помощь, я бы хотел реализовать динамический ввод двух массивов, у меня 2 вопроса.
1)Почему выдаёт ошибку (1>c:\users\pavel\documents\visual studio 2010\projects\firma\firma\firma.cpp(375): error C2065: numberELemFirma: необъявленный идентификатор) я же вроде его обьявил.
2)Соответственно как сделать выход из цикла по вводу массива после 2 нажатия enter, то есть если бы это был не int массив я бы написал
C++
1
2
if (str[i]=='\n')
            break;
но так как это интовский массив, если я правильно понимаю он не считывает '\n', а так и оставляет её в потоке ввода, возможно можно как нибудь считать '\n' с потока ввода.
Вот код:
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
class firma
{
public:
    int *rating;
    int *number;
    int numberElemFirma;
    firma();
    ~firma();
    void inputFirma();
};
firma :: firma()
{
    rating = NULL;
    number = NULL;
    numberElemFirma = 0;
}
firma :: ~firma()
{
    rating = NULL;
    delete[] rating;
    number = NULL;
    delete[] number;
    numberElemFirma  = 0;
}
void firma :: inputFirma()
{
    while (true)
    {
        rating = (int*)realloc(rating,(numberElemFirma+1)*sizeof(int));
        number = (int*)realloc(number,(numberElemFirma+1)*sizeof(int));
        cout<<"Введите номинал"<<endl;
        cin >> rating[numberElemFirma];
        cout<<"Введите количество номинала"<<endl;
        cin >> number[numberELemFirma];
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        numberELemFirma++;
    }
};
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
20.05.2013, 18:17     Ввод двумерного динамического массива с консоли #24
emmure, numberELemFirma - ошибка. А выход через ctrl+c можно сделать
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
20.05.2013, 18:30  [ТС]     Ввод двумерного динамического массива с консоли #25
Цитата Сообщение от nexen Посмотреть сообщение
emmure, numberELemFirma - ошибка. А выход через ctrl+c можно сделать
А точно спасибо а можно поподробнее о ctrl+c
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
20.05.2013, 18:42     Ввод двумерного динамического массива с консоли #26
emmure, ох, или ctrl+z.. Я уж и не помню >_< Если кто-нибудь ещё в темку заглянет, то отпишитесь об этом?
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
20.05.2013, 18:42     Ввод двумерного динамического массива с консоли #27
emmure, можно попробывать использовать перевод строки в целочисленный тип
C++
1
atoi ()
,но не уверен...
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 18:46     Ввод двумерного динамического массива с консоли #28
Цитата Сообщение от nexen Посмотреть сообщение
или ctrl+z
В Windows генерирует EOF.

Добавлено через 1 минуту
Цитата Сообщение от emmure Посмотреть сообщение
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Эта строчка зачем?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
20.05.2013, 18:50     Ввод двумерного динамического массива с консоли #29
emmure, как сказал alsav22, можно пробовать feof на stdin для проверки ctrl+c. Примерно так:
C++
1
2
3
4
5
6
7
8
9
while (true)
{
cin << number;
if (feof(stdin)) break;
else
{
// do something with number
}
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 18:55     Ввод двумерного динамического массива с консоли
Еще ссылки по теме:

Передача динамического двумерного массива в функцию - C++
Я сделал вот так: void PrintMatrix(int** matrix, int&amp; n, int&amp; m) { for (int i = 0; i &lt; n; i++) { cout &lt;&lt; &quot;Row &quot; &lt;&lt; (i...

Передача динамического двумерного массива в процедуру - C++
Написал вот такой код для одномерного динамического массива #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; ...

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

Создание двумерного динамического массива в функции - C++
Здравствуйте. Скажите где я допустил ошибку в создании динамического массива? #include&lt;stdio.h&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 18:55     Ввод двумерного динамического массива с консоли #30
C++
1
if (cin.eof()) break;
Добавлено через 1 минуту
Ctrl + z
Yandex
Объявления
20.05.2013, 18:55     Ввод двумерного динамического массива с консоли
Ответ Создать тему
Опции темы

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