Необычный глюк с массивом строк
Первый :
#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 <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 часа, так и не нашёл, что. Надеюсь на вашу помощь :)
Также можно перед cin.getline(txt,500); добавить например cin.getline(txt,1);, чтоб считать символ перехода на другую строку... Может не самое правильное решение, но первое, что мне пришло в голову.
cin.getline(txt,2);
cin.getline(txt,500);
.....
теперь работае.т Не могу понять, какие 2 символа "съедаются".
1) символ перехода на новую строку
2) ? - и это не цифра кол-ва строК, т.к. она может быть и 2,3-хзначная. И будет работать
1) символ перехода на новую строку
2) ? - и это не цифра кол-ва строК, т.к. она может быть и 2,3-хзначная. И будет работать
Кажется первый символ - символ конца строки, а второй - символ перехода на новую строку.
Чтож ,спасибо
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** ?
Тут не только гремучая смесь, но и опять этот странный диалект: в котором void main() и iostream.h т.п. Но, вроде бы, автор темы не просил оценить нестандартность кода...
[QUOTE=Green]Зачем использовать C-string (char*), а не использовать C++ std::string ?
Почему бы не использовать std::vector, вместо char** ?[/QUOTE]
Авторы учебников пишут, что использование C-string и массивов эффективнее (быстрее, меньше требуют ресурсов), чем std::string, std::vector. Однако, я больше использую последние, так как мне они кажутся удобнее и безопаснее, и мощь современных (и "вчерашних") компьютеров позволяет.
Будем считать, что это бонус от участников форума.
Авторы учебников пишут, что использование C-string и массивов эффективнее (быстрее, меньше требуют ресурсов), чем std::string, std::vector. Однако, я больше использую последние, так как мне они кажутся удобнее и безопаснее, и мощь современных (и "вчерашних") компьютеров позволяет.
"Авторы учебников" ошибаются по нескольким пунктам.
[color=red]Дальнейшее обсуждение "std::string vs C-string" перенесено в соотв. тему.[/color]
Всем спасибо за разъяснения