Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Необычный глюк с массивом строк

5.2K
22 марта 2008 года
SerMax
96 / / 04.11.2006
Привет! Есть следующие образцы кода :
Первый :
Код:
#include <iostream.h>
#include <conio.h>


void main()
{
 int i,j;
 int N; // chislo statey
  char **txt;   //txt [j]  stroka/simvol

 cout<<"VVedite kol-vo statey ->";
 cin>>N;

 txt=new char*[N];
 for (i=0;i<N;i++)
  txt=new char[501];

 i=0;
 cin.getline(txt,500);
 cout<<endl<<txt<<endl;
 getch();
}


Второй:
Код:
#include <iostream.h>
#include <conio.h>

void main()
{
 int i,j;
 int N=3; // chislo statey
  char **txt;   //txt [j]  stroka/simvol

 txt=new char*[N];
 for (i=0;i<N;i++)
  txt=new char[501];

 i=0;
 cin.getline(txt,500);
 cout<<endl<<txt<<endl;
 getch();
}


Т.е. понятнО, чем отличаются. Так вот - в первом случае оператор
cin.getline(txt,500); как будто пропускается, я не могу ввести символы даже.

Во втором случаем всё прекрасно работает. Примеры тестовые, проверял работу, вот выявился такой глюк. Вроде не первый день в программировании, уже и С++ переставил (Borland C++ v5.02), но проблема осталась. Понимаю, что где-то очевидно всё. Убил 4 часа, так и не нашёл, что. Надеюсь на вашу помощь :)
87
23 марта 2008 года
Kogrom
2.7K / / 02.02.2008
Глюк не с массивом строк, а в понимании смысла команды getline. Попробуйте не переходя на другую строку, печатать текст сразу после ввода количества статей и всё сработает.

Также можно перед cin.getline(txt,500); добавить например cin.getline(txt,1);, чтоб считать символ перехода на другую строку... Может не самое правильное решение, но первое, что мне пришло в голову.
3
23 марта 2008 года
Green
4.8K / / 20.01.2000
А почему бы не использовать std::getline ?
5.2K
23 марта 2008 года
SerMax
96 / / 04.11.2006
дописал :
 
Код:
.....
 cin.getline(txt,2);
 cin.getline(txt,500);
.....


теперь работае.т Не могу понять, какие 2 символа "съедаются".
1) символ перехода на новую строку
2) ? - и это не цифра кол-ва строК, т.к. она может быть и 2,3-хзначная. И будет работать
360
23 марта 2008 года
P*t*
474 / / 15.02.2007
Цитата: SerMax
Не могу понять, какие 2 символа "съедаются".
1) символ перехода на новую строку
2) ? - и это не цифра кол-ва строК, т.к. она может быть и 2,3-хзначная. И будет работать



Кажется первый символ - символ конца строки, а второй - символ перехода на новую строку.

5.2K
24 марта 2008 года
SerMax
96 / / 04.11.2006
вполне вероятно !
Чтож ,спасибо
3
24 марта 2008 года
Green
4.8K / / 20.01.2000
SerMax, почему бы тебе не воспользоваться поиском по форуму. Ведь много раз обсуждалось уже:
http://forum.codenet.ru/showthread.php?t=32450
http://forum.codenet.ru/showthread.php?p=157964
http://forum.codenet.ru/showthread.php?t=34739

Далее, для чего это гремучая смесь C++ и C-style?
Зачем использовать C-string (char*), а не использовать C++ std::string ?
Почему бы не использовать std::vector, вместо char** ?
87
24 марта 2008 года
Kogrom
2.7K / / 02.02.2008
Цитата: Green
Далее, для чего это гремучая смесь C++ и C-style?


Тут не только гремучая смесь, но и опять этот странный диалект: в котором void main() и iostream.h т.п. Но, вроде бы, автор темы не просил оценить нестандартность кода...
[QUOTE=Green]Зачем использовать C-string (char*), а не использовать C++ std::string ?
Почему бы не использовать std::vector, вместо char** ?[/QUOTE]

Авторы учебников пишут, что использование C-string и массивов эффективнее (быстрее, меньше требуют ресурсов), чем std::string, std::vector. Однако, я больше использую последние, так как мне они кажутся удобнее и безопаснее, и мощь современных (и "вчерашних") компьютеров позволяет.

3
24 марта 2008 года
Green
4.8K / / 20.01.2000
Цитата: Kogrom
Но, вроде бы, автор темы не просил оценить нестандартность кода...


Будем считать, что это бонус от участников форума.

Цитата: Kogrom

Авторы учебников пишут, что использование C-string и массивов эффективнее (быстрее, меньше требуют ресурсов), чем std::string, std::vector. Однако, я больше использую последние, так как мне они кажутся удобнее и безопаснее, и мощь современных (и "вчерашних") компьютеров позволяет.


"Авторы учебников" ошибаются по нескольким пунктам.

[color=red]Дальнейшее обсуждение "std::string vs C-string" перенесено в соотв. тему.[/color]

5.2K
25 марта 2008 года
SerMax
96 / / 04.11.2006
признаю, код может и нерациональный. Да и на С++ я не писал уже как год, а тут "заставили". Пришлось многое вспоминать на спех.
Всем спасибо за разъяснения
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог