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

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

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

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

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

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

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

ввод двумерного массива,ввод размерности массива,заполнение массива случайными числами - C++
#include "stdafx.h" #include "locale.h" #include "stdlib.h" #include "math.h" void main() { setlocale(LC_ALL,"rus"); int...

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
25.04.2013, 02:53  [ТС] #16
ой всё понял ошибку)
0
Vourhey
Почетный модератор
6481 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.04.2013, 02:54 #17
И вообще, используй теги для кода. Ничего же не видно...
0
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;
}
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
1
Миниатюры
Ввод двумерного динамического массива с консоли  
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;
}
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,844
25.04.2013, 08:08 #21
Цитата Сообщение от emmure Посмотреть сообщение
но вопрос остаётся открытым почему выдаёт ошибку
здесь???

Цитата Сообщение от emmure Посмотреть сообщение
delete(Arr[i]);
* * delete(Arr);
наверно надо написать так
C++
1
2
delete[] Arr[i];
delete[] Arr;
зачем это
Цитата Сообщение от emmure Посмотреть сообщение
y--;
0
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;
разницы нету
0
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++;
    }
};
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
20.05.2013, 18:17 #24
emmure, numberELemFirma - ошибка. А выход через ctrl+c можно сделать
1
emmure
2 / 2 / 0
Регистрация: 15.12.2012
Сообщений: 93
20.05.2013, 18:30  [ТС] #25
Цитата Сообщение от nexen Посмотреть сообщение
emmure, numberELemFirma - ошибка. А выход через ctrl+c можно сделать
А точно спасибо а можно поподробнее о ctrl+c
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
20.05.2013, 18:42 #26
emmure, ох, или ctrl+z.. Я уж и не помню >_< Если кто-нибудь ещё в темку заглянет, то отпишитесь об этом?
0
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
20.05.2013, 18:42 #27
emmure, можно попробывать использовать перевод строки в целочисленный тип
C++
1
atoi ()
,но не уверен...
0
alsav22
5419 / 4815 / 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');
Эта строчка зачем?
1
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
}
}
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 18:55 #30
C++
1
if (cin.eof()) break;
Добавлено через 1 минуту
Ctrl + z
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 18:55
Привет! Вот еще темы с ответами:

заполнение динамического двумерного массива - C++
Дано число n. Создайте массив int A и заполните его по спирали начиная с числа 0 в центральной клетке A. Спираль выходит вверх, далее...

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

Заполнение двумерного динамического массива - C++
Доброго времени суток! Уважаемые коллеги! Второй день пытаюсь разобраться с вводом в char** символов, точнее строки символов. Создал...

Сортировка двумерного динамического массива - C++
Уважаемые форумчане, при сортировке и выводе отсортированного массива в первой строке вместо нормальных значений выводит мусор, ковыряюсь в...


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

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

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