Cin и иже с ним

  • Автор темы AlexSaaa
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

AlexSaaa

Гость
#1
существует задачка где необходимо выровнять введенный текст по ширине..
в принципе не сложно.. проблема в малом..ввести сий текст.. при попытке перейти на новую строчку--> предлагает выйти из программы(прес ени кей ту континуе)
завел динамический многомерный массив...

char**text;
text=new char*[10];
for(i=0; i<50; ++i)
text=new char[100];
for(i=0; i<50; ++i) cin.getline(text,100);
cout<<endl<<"Text "<<text[1];


опять проблемка..нужно вводить текст пока масив не будет наполнен.. и нет никакой гаранти, что в конце этого насильного ввода не выдаст сообщения типа:"Инструкция обратилась по адресу блаблабла"
 
G

Guest

Гость
#2
Ну про cin ничего не скажу - я на С++ консольных прог и не писал B) А вот выделение памяти сразу никуда не годится, как и цикл на полное заполнение. Вводишь текст во временный буфер, анализируешь на окончание ввода (например, Введите 2 пустые строки для окончания), потом добавляешь в массив данных. Используй либо STL vector (если ты реально на программера учишься, лучше сразу изучай STL и привыкай пользоваться), либо список, либо просто сам наращивай массив по необходимости.
 
G

Guest

Гость
#3
Кстати, а почему у тебя для текста выделяется только 10 мест, а потом заполнять пытаешься 50?
 
A

AlexSaaa

Гость
#4
Кстати, а почему у тебя для текста выделяется только 10 мест, а потом заполнять пытаешься 50?
идея была такова...создать динамический 10-мерный_))) массив с максимум 50 елементов в каждой сроке.. потом строки ТЕКСТ(и) воспринимать как отдельные строки ..не получилось...

Вводишь текст во временный буфер, анализируешь на окончание ввода (например, Введите 2 пустые строки для окончания), потом добавляешь в массив данных.
а можна поподробней..не совсем уловил идею...


относительно STL мне бы со стандартными библиотеками разобратся... хотя есть какая-нить лит-ра чтобы и я понял что сие такое?
 
?

????

Гость
#5
<!--QuoteBegin-AlexSaaa+26:09:2005, 21:05 -->
<span class="vbquote">(AlexSaaa @ 26:09:2005, 21:05 )</span><!--QuoteEBegin-->относительно STL мне бы со стандартными библиотеками разобратся... хотя есть какая-нить лит-ра чтобы и я понял что сие такое?
[snapback]25194" rel="nofollow" target="_blank[/snapback]​
[/quote]
STL и есть стандартная библиотека (Standart Template Library).
Лит-ра есть тут:
http://anatolix.naumen.ru/Books/CPPSTL?v=15p5 и на других книжных обменниках.
 

Вложения

  • 158.5 КБ Просмотры: 68
G

Guest

Гость
#6
<!--QuoteBegin-AlexSaaa+26:09:2005, 20:05 -->
<span class="vbquote">(AlexSaaa @ 26:09:2005, 20:05 )</span><!--QuoteEBegin-->оздать динамический 10-мерный_))) массив с максимум 50 елементов в каждой сроке..[/quote]

По коду ты создаешь место для 10 строк по 100 символов. А потом пытаешься прочитать 50 строк, вот и получаешь свои AV. А слово "динамический" ты просто так употр*цензура*ешь? В программировании "динамический массив" имеет конкретное значение - способный изменять размер. Твой массив как раз статический, т.к. ты выделяешь фиксированное количество элементов. Хочешь динамический - смотри STL, или сам пиши.

По поводу ввода. А ты подумай. Пользователь может ввести 1, а может и 30 строк. Как ему сказать тебе, что он закончил вводить, при отсутствии явного интерфейса?
 
A

alam

Гость
#7
Я так понял нужно выровнять введенный текст по ширине дополняя его пробелами. Это задача кажется есть в книге Кернигана-Ритчи. Вроде как есть и решебник к этой книге. А зачем вводить весь текст сразу? Введи строку, до символа перевода строки или до определенного размера. Выровняй ее, выведи, введи новую.
Типа
#define WIDTH 50
char s[WIDTH];
while(getline(s, 30)!=EOF)
{
spreadline(s, WIDTH);
cout << s;
}
 
Статус
Закрыто для дальнейших ответов.