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

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

Войти
Регистрация
Восстановить пароль
 
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
#1

Дружественные ф-ции и ввод строки - C++

15.07.2010, 12:52. Просмотров 689. Ответов 10
Метки нет (Все метки)

День добрый!
Столкнулся со следующей проблемой, пользуясь VS6.
char str [80]; cin>> str; вводит до пробела, gets() не работает, getline() аналогично работать не хочет (висит окно с мигающим указателем). Так как же лучше всего вводить строку с учётом пробелов, и если не указан размер (char* str).
И второе, почему функция operator=() не может быть дружественной?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 12:52     Дружественные ф-ции и ввод строки
Посмотрите здесь:

C++ ввод строки
C++ с++ ввод строки и ....
C++ Ввод строки
C++ Ввод строки
ввод строки C++
Передача ф-ции как параметра другой ф-ции C++
Ввод строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
larev01
0 / 0 / 0
Регистрация: 11.07.2010
Сообщений: 39
15.07.2010, 13:56     Дружественные ф-ции и ввод строки #2
cin.get()
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
15.07.2010, 14:09     Дружественные ф-ции и ввод строки #3
C++
1
std::cin.getline(str, 80);
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
15.07.2010, 14:32     Дружественные ф-ции и ввод строки #4
Цитата Сообщение от alexsvk Посмотреть сообщение
И второе, почему функция operator=() не может быть дружественной?
МОжет потому, что при использовании дружественной функции отсутствует явно передаваемый
указатель на объект (т. е. указатель this), и таким образом, любое изменение параметра внутри дружественной оператор-функции не влияет на объект, являющийся источником вызова.
И следовательно нельзя будет использовать следующие конструкции
C++
1
a = b = c = d = 0;
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
15.07.2010, 15:07  [ТС]     Дружественные ф-ции и ввод строки #5
larev01, M128K145 эти функции не работают должным образом в VS6. Может быть есть универсальный способ ввода?
FireNovel, да, а если передавать первый параметр по ссылке, то изменения будут происходить. Загвоздка, разве что, будет в распределении памяти, если какой-либо объект будет содержать указатель, а в общем вышеуказанная цепочка будет работать.
M128K145
Эксперт C++
 Аватар для M128K145
8277 / 3496 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
15.07.2010, 21:09     Дружественные ф-ции и ввод строки #6
alexsvk, вот этот код в 6 студии работает корректно
C++
1
cin.getline(str, 80);
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
15.07.2010, 22:24  [ТС]     Дружественные ф-ции и ввод строки #7
Да, действительно. Спасибо.
Есть ли альтернативы?
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 13:05     Дружественные ф-ции и ввод строки #8
Цитата Сообщение от alexsvk Посмотреть сообщение
Да, действительно. Спасибо.
Есть ли альтернативы?
Есть функция
C
1
2
3
char *gets( 
   char *buffer 
);
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.07.2010, 14:07     Дружественные ф-ции и ввод строки #9
Цитата Сообщение от FireNovel Посмотреть сообщение
Есть функция
C
1
2
3
char *gets( 
   char *buffer 
);
gets не контролирует размер считываемой строки, т.е. если написать так:

C++
1
2
char str [5];
gets (str);
и ввести больше 5 символов, то будет ошибка.

Добавлено через 2 минуты

Если не хочется использовать то, что предложил M128K145, то можно поступить так:

C++
1
2
char str [5];
fgets (str, 5, stdin);
FireNovel
 Аватар для FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 14:18     Дружественные ф-ции и ввод строки #10
Цитата Сообщение от .::.DIMA.::. Посмотреть сообщение
gets не контролирует размер считываемой строки, т.е. если написать так:
Есть еще такой вариант
C
1
2
3
4
char *gets_s( 
   char *buffer,
   size_t sizeInCharacters
);
По сути делает тоже самое, что и
C
1
fgets (str, 5, stdin);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2010, 19:51     Дружественные ф-ции и ввод строки
Еще ссылки по теме:

C++ Ввод строки в С++
Ввод строки C++
Дружественные перегрузки операторов и дружественные классы C++
Ввод/вывод строки C++
C++ Ввод строки

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

Или воспользуйтесь поиском по форуму:
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
16.07.2010, 19:51  [ТС]     Дружественные ф-ции и ввод строки #11
Ребята, только gets и fgets не хотят работать корректно в VS6...
Да, и ещё, есть ли вариант ввода, кроме вышеприведённых (не исключаю их возможность подобного ввода), чтобы пользователь вводил столько, сколько ему угодно, а размер введённого потом бы просто определялся для char* переменной?
Yandex
Объявления
16.07.2010, 19:51     Дружественные ф-ции и ввод строки
Ответ Создать тему
Опции темы

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