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

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

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

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

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

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

Передача ф-ции как параметра другой ф-ции - C++
struct pupil{ char surname; int school; int answer; int num; } tmp, a; int usl(int i, pupil a) { }

Дружественные перегрузки операторов и дружественные классы - C++
#include <iostream> using namespace std; class person; class book { public: book(){}; int get_inf(person &a); void...

Ввод строки - C++
У меня возникла такая проблема: как ввести строку из консоли. Написал вот что: cout<<"Input time \"hour:minute:second\"\n"; char...

Ввод строки - C++
#include<iostream> #include<clocale> using namespace std; #define DEBUG class Monom{ protected: int Step,Kof; public: ...

Ввод строки - C++
Помогите решить такую проблему: Мне нужно ввести строку, которая состоит более 1 слова. когда я пишу: ... char a, b, c; cin>>a; ...

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

10
larev01
0 / 0 / 0
Регистрация: 11.07.2010
Сообщений: 39
15.07.2010, 13:56 #2
cin.get()
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.07.2010, 14:09 #3
C++
1
std::cin.getline(str, 80);
0
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
15.07.2010, 14:32 #4
Цитата Сообщение от alexsvk Посмотреть сообщение
И второе, почему функция operator=() не может быть дружественной?
МОжет потому, что при использовании дружественной функции отсутствует явно передаваемый
указатель на объект (т. е. указатель this), и таким образом, любое изменение параметра внутри дружественной оператор-функции не влияет на объект, являющийся источником вызова.
И следовательно нельзя будет использовать следующие конструкции
C++
1
a = b = c = d = 0;
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
15.07.2010, 15:07  [ТС] #5
larev01, M128K145 эти функции не работают должным образом в VS6. Может быть есть универсальный способ ввода?
FireNovel, да, а если передавать первый параметр по ссылке, то изменения будут происходить. Загвоздка, разве что, будет в распределении памяти, если какой-либо объект будет содержать указатель, а в общем вышеуказанная цепочка будет работать.
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
15.07.2010, 21:09 #6
alexsvk, вот этот код в 6 студии работает корректно
C++
1
cin.getline(str, 80);
1
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
15.07.2010, 22:24  [ТС] #7
Да, действительно. Спасибо.
Есть ли альтернативы?
0
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 13:05 #8
Цитата Сообщение от alexsvk Посмотреть сообщение
Да, действительно. Спасибо.
Есть ли альтернативы?
Есть функция
C
1
2
3
char *gets( 
   char *buffer 
);
0
.::.DIMA.::.
143 / 143 / 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);
0
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);
0
alexsvk
8 / 8 / 1
Регистрация: 15.07.2010
Сообщений: 255
16.07.2010, 19:51  [ТС] #11
Ребята, только gets и fgets не хотят работать корректно в VS6...
Да, и ещё, есть ли вариант ввода, кроме вышеприведённых (не исключаю их возможность подобного ввода), чтобы пользователь вводил столько, сколько ему угодно, а размер введённого потом бы просто определялся для char* переменной?
0
16.07.2010, 19:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2010, 19:51
Привет! Вот еще темы с ответами:

ввод строки - C++
привет! у меня есть проблемка.. для начала прога: #include <stdlib.h> int main (void) { return system("ping 192.168.3.1"); } ...

Ввод строки - C++
Доброго времени суток форумчане. Вот возник вопрос: при вводе определенного текста мне нужно чтобы выдавало определенный результат, но...

Ввод строки - C++
Как ввести массив символов (строку)? (желательно все возможные варианты) А то через gets фигня какая-то получается.

Ввод строки в С++ - C++
Подскажите как сделать так, чтобы введенная строка (string) сохранилась без учета пробелов? а то getline пробелы тоже сохраняет, а cin...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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