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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 307, средняя оценка - 4.87
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
#1

Функция С++ getline() - C++

28.07.2009, 23:37. Просмотров 39965. Ответов 45

Здравствуйте! Скажите пожалуйста, каков смысл функции cin.getline(). Если не сложно,приведите пожалуйста пример.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 23:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция С++ getline() (C++):

Функция getline - C++
Делаю упражнение по С++ (консольное приложение). Необходимо считать строку, включая пробелы. Вот описание класса: class employee { ...

Функция getline - C++
Добрый вечер. Очень долго пытался найти в чём проблема в работе программы-она выдавала немного не то значение,которые было необходимо.Ни...

Функция getline(cin,.) - C++
Здравствуйте уважаемые программисты. По темам пробежался getline(), но чет не понял, проблема, почему при вводе данных о первом человеке...

Не работает функция getline ! - C++
Здравствуйте, помогите, если можете. Не корректно работает функция getline ! Я облазил google, нашел много похожих постов, но...

функция getline() в dev_C++ - C++
Помогите пожалуйста, не могу разобраться с функцией getline() Пишу на dev_C++ и не понемаю смысл работы функции. Она читает, пока не...

Не выполняется функция getline() - C++
Добрый вечер, уважаемые программисты! Написал программу, содержащую класс, который имеет два поля: номер и имя, и два метода: ввод и...

45
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:19 #31
Цитата Сообщение от Golovastik Посмотреть сообщение
Я имею ввиду, std:: ,можно как-то написать юзинг намеспасе стд,чтоб не вводить постоянно стд.
для этого и пишут юзинг нэймспейс стд, чтобы не писать постоянно стд::
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:21  [ТС] #32
А код, не выводит количество введённых символов,если написать вот так. В вашем случае,тоже не выводит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
 
int main() 
{
    string str;
    cout << "Please, enter the string:" << endl;
    getline(std::cin, str);
    cout << strlen(str) << '\n';
    system("pause");
    return 0;
}
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:24 #33
Цитата Сообщение от Golovastik Посмотреть сообщение
А код, не выводит количество введённых символов,если написать вот так.
да ну?

тебе явно не хватает теоретических сведений. Почитай учебники. string - это класс, а не тип данных. strlen - работает для си-строк char*. Для подсчета введенных символов, используется метод класса string. Почитай учебник.
0
ISergey
Maniac
Эксперт С++
1397 / 908 / 56
Регистрация: 02.01.2009
Сообщений: 2,714
Записей в блоге: 1
30.07.2009, 01:33 #34
C++
1
cout << strlen(str) << '\n';
мда.. так нужно
C++
1
std::cout << str.size() /* or str.length() */ << '\n';
std::string
0
mirso
525 / 343 / 17
Регистрация: 05.04.2009
Сообщений: 709
30.07.2009, 08:34 #35
Golovastik,
Цитата Сообщение от Golovastik Посмотреть сообщение
не выводит количество введённых символов,если написать вот так
C++
1
cout << strlen(str) << '\n';
если с минимум замен, то заменить на ->
C++
1
cout << strlen(str.c_str()) << '\n';
Так, выводить будет,
но так не нужно!

Не по теме:

Апазорисся! И дирехтор банка тибя выганит с работы насегда!


Нужно как у ISergey!
C++
1
std::cout << str.length() << '\n';
1
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 22:19  [ТС] #36
Вот так работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
//#include <cstring>
using namespace std;
 
int main() 
{
    string str;
    cout << "Please, enter the string:" << endl;
    getline(cin, str);
    cout << str.size();
    system("pause");
    return 0;
}
У меня есть ещё маленький вопросик. Вы не дадите пож. обяснение вот этой строке.
C++
1
2
    
cout << str.size();
str - это переменная строкового типа стринг, а вот size() - это получение размера символов переменной str этого типа?

Добавлено через 8 минут 28 секунд
Ещё вопрос. Какую роль играет в этой строке cin?
C++
1
getline(cin, str);
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
30.07.2009, 22:26 #37
size() - по синтаксису понятно, что это метод, по имени понятно, что это размер. Вывод: это метод который возвращает размер str
getline(cin, str); - считывание строки. Логично предположить, что cin - это поток ввода, str - куда собственно выводится содержимое этого потока
0
odip
Эксперт С++
7161 / 3223 / 58
Регистрация: 17.06.2009
Сообщений: 14,164
30.07.2009, 23:11 #38
Вывод: это метод который возвращает размер str
Отлично!
А что есть размер str ?
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
30.07.2009, 23:15 #39
естественно количество символов в str
0
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
07.10.2009, 16:40 #40
Посмотрел описание функции istream::getline.
В начале описания указаны портотипы:

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

Я не совсем понимаю, что говорят портотипы.
istream& - говорит о том, что данная функция возвращает ссылку на объект класса istream, т.е. на поток ?
Далее, если рассматривать второй портотип, то в списке параметров:
char* s - это сам символьный массив.
streamsize n - его размер
А для чего char delim ?

Поправте где неправ ...
0
M128K145
Эксперт С++
8309 / 3529 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.10.2009, 18:13 #41
Цитата Сообщение от Lorr Посмотреть сообщение
А для чего char delim ?
какой символ считать символом конца строки. Поставишь там символ 'А' и как только в потоке встретится этот символ чтение завершится.
0
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 470
12.04.2011, 09:59 #42
А кстати есть в циклах ввода с консоли довольно мутное место:
как вообще такой цикл прервать???
C++
1
2
3
4
5
6
7
char word[100]; 
while(cin.getline(word,100))
{
...
}
printf("vixod");
system("pause");
Никак гад, только по ctrl+Break - останавливает всю программу
аналогичный вопрос для string
C++
1
2
3
4
5
string str;
while(getline(cin,str)) //что то здесь не так написано. Как правильно?
{
...
}
0
ForEveR
В астрале
Эксперт С++
7988 / 4747 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
12.04.2011, 10:18 #43
eugrita, Послать сигнал EOF. Ctrl+Z на винде, CTRL+D на Linux (?)
0
Ma3a
Эксперт С++
619 / 463 / 31
Регистрация: 28.01.2011
Сообщений: 605
12.04.2011, 15:57 #44
Цитата Сообщение от ForEveR Посмотреть сообщение
CTRL+D на Linux (?)
Точно так.
1
eugrita
3 / 4 / 0
Регистрация: 18.11.2009
Сообщений: 470
12.04.2011, 19:50 #45
Спасибо. И чтобы как-то подытожить или если хотите, обобщить обсуждение,
ставлю скорее философский вопрос. А какой вообще современный стиль работы со
строками в C++? или даже в C#?
В эволюции С++ от С начиная со строк как массив char (0-терминированные)
появились новые классы - это String , затем еще CString.
Возможно я что-то позабыл. Так как лучше всего или профессиональнее?
0
12.04.2011, 19:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2011, 19:50
Привет! Вот еще темы с ответами:

Функция getline в условии while - C++
Здравствуйте! Перевожу код с c++ на c#. Но возникла проблема с условием цикла while while(getline(cin,S)) {...} Почитал в...

Функция cin.getline() - C++
Имеется часть кода: void EditName(Account &amp;acc) { delete acc.name; char nam; cout&lt;&lt;&quot;Введите новое имя: &quot;; ...

Не работает функция getline(); - C++
Помогите, после ввода в переменную int c не выполняется функция getline, программа ее просто пропускает. #include &lt;iostream&gt; using...

Функция getline и ifstream - C++
int main() { int i,c; char filename; char input_line; cout&lt;&lt;&quot;Enter a file name and press ENTER: &quot;; cin.getline(filename,80);...


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

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

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