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

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

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

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

28.07.2009, 23:37. Просмотров 40256. Ответов 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
28.07.2009, 23:40 #2
записывает в перменную n-е кол-во символов (игнорирую пробелы, в отличии от cin >> );

C++
1
2
3
char str[255];
cin.getline(str, sizeof(str));
cout << str << endl;
2
Rififi
2363 / 1056 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 00:07 #3
Golovastik,
функция насыщает переданный буфер символами до конца строки, но не более N-1 символов.
2
odip
Эксперт С++
7161 / 3219 / 62
Регистрация: 17.06.2009
Сообщений: 14,161
29.07.2009, 00:07 #4
игнорирую пробелы, в отличии от cin >>
Это кто игнорирует пробелы ?
getline() пробелы не игнорирует.
2
Gravity
569 / 563 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
29.07.2009, 00:09 #5
Цитата Сообщение от odip Посмотреть сообщение
Это кто игнорирует пробелы ?
getline() пробелы не игнорирует.
Граф, видимо, имел ввиду, что getline не прекращает считывать текст при встрече пробелов, в отличие от...
1
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
29.07.2009, 00:22  [ТС] #6
Попробывал сам наваять,но чего-то не вышло, не могу понять почему.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
    char b[50]; int k = 0;
    cout<<"Vvedite-> ";
    cin.getline(b,sizeof(b));
    while(b[50]!='\0')
        k++;
    cout<<"Rezylt = "<<b;
    cin.get();
}
0
Rififi
2363 / 1056 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 00:25 #7
а ты можешь обьяснить полёт своей фантазии в строчках 10-11?
3
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
29.07.2009, 00:26  [ТС] #8
Хотел увеличить количество,пока введённый символ не нулевой,если нулевой,тогда не увеличивать количество. Хочу чтоб результат выдавал количество символов,которе я введу.
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.07.2009, 00:38 #9
Golovastik, ну во первых есть функция strlen();

C++
1
cout << strlen(b);
если же использовать твой вариант, тогда необходимо делать так:

C++
1
2
        while(b[k]!='\0')
                k++;
у тебя же получалось, что вообще сравнивался НЕСУЩЕСТВУЮШЩИЙ символ с '\0'.

Индексация массива начинается с 0. Т.е. создаешь массив
C++
1
char str[5];
это значит что элменты у него:
str[0],str[1],str[2],str[3],str[4]

Не по теме:

p.s: 1900 пост

2
Rififi
2363 / 1056 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 00:39 #10
во-первых, ты совершил распространённую нубскую ошибку: ты не инициализировал буфер, оставив в нём мусор. к этому мы ещё вернёмся.
далее. выражение b[50] как несложно (надеюсь) догадаться - константа, которая не меняется на всём протяжении цикла while, поэтому кто и чего там будет считать - непонятно. кстати говоря для
Хотел увеличить количество,пока введённый символ не нулевой
есть стандартная функция strlen

теперь про буфер. ты зачем-то проверяешь самый последний символ этого буфера, не утчитывая тот факт, то ты можешь ввести меньшее количество символов. например ты ввёл 123, и тогда буфер будет выглядеть так:
'1', '2', '3', 0, <мусор до конца>
0
odip
Эксперт С++
7161 / 3219 / 62
Регистрация: 17.06.2009
Сообщений: 14,161
29.07.2009, 10:00 #11
теперь про буфер. ты зачем-то проверяешь самый последний символ этого буфера
Вообще говоря b[50] находится уже за концом буфера. В массиве b[] допустимые индексы от 0 до 49.
0
Rififi
2363 / 1056 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.07.2009, 11:41 #12
Вообще говоря b[50] находится уже за концом буфера.
Да, верно, thanx. Сглюканул на ночь глядя (:
0
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
29.07.2009, 23:23  [ТС] #13
Хорошо,если этот код написать так, по совету графа, это будет считаться коректным? Скажите,что именно нужно убрать в нём,чтоб код считался нормальным,как у всех?
Я изменил в одном месте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main()
{
        char b[50]; int k = 0;
        cout<<"Vvedite-> ";
        cin.getline(b,sizeof(b));
        while(b[k]!='\0')
                k++;
        cout<<"Rezylt = "<<k;
        cin.get();
}
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
29.07.2009, 23:56 #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
        char b[50]; 
        int k = 0;
        cout << "Please, enter the string [below 50 symbols]: ";
        cin.getline(b,sizeof(b));
        k = strlen(b); // незачем изобретать велосипед
        cout << "Length of string is "<< k;
        system("pause"); // пауза для windows.. вместо cin.get();
        return 0; // функция main - типа int. Поэтому должна возвращать число ОСи. 0 -успешное завершение
}
1
Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:04  [ТС] #15
Спасибо Граф! Вроде уяснил. Один момент, зачем писать в 8 строке
C++
1
 cin.getline(b,sizeof(b));
если можно
C++
1
 cin.getline(b,50); //чтоб длинным не была
0
30.07.2009, 00:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2009, 00:04
Привет! Вот еще темы с ответами:

Функция 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);...


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

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

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