Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/224: Рейтинг темы: голосов - 224, средняя оценка - 4.59
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435

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

28.07.2009, 23:37. Показов 47533. Ответов 45

Студворк — интернет-сервис помощи студентам
Здравствуйте! Скажите пожалуйста, каков смысл функции cin.getline(). Если не сложно,приведите пожалуйста пример.
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.07.2009, 23:37
Ответы с готовыми решениями:

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

Функция getline
Всем привет! Собственно, вопрос в следующем. Есть такой код, который написал для учебной задачки. Все бы хорошо, но никак не пойму один...

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

45
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:30  [ТС]
Студворк — интернет-сервис помощи студентам
Тоесть изменение можно сделать в одном из циклов, написав,чтоб считало до sizeof(z), и получается,что начальная инициализация в 50 символов будет проигнорированна?
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
30.07.2009, 00:35
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а можно написать так, и изменить лишь размер при объявлении.
можно использовать std::string и не морочить себе голову.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <string>
 
int main() {
 
    std::string str;
    std::getline(std::cin, str);
    std::cout << str << '\n';
 
    return 0;
}
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 00:40
Цитата Сообщение от ISergey Посмотреть сообщение
можно использовать std::string и не морочить себе голову


Добавлено через 1 минуту 29 секунд
но есть одно... у меня в крови системный программсит сидит... а он знаешь из какого народа? все ж не так... все ж самому писать.. дабы получить максимум из проивзодительности...

Добавлено через 2 минуты 37 секунд
Цитата Сообщение от Golovastik Посмотреть сообщение
Тоесть изменение можно сделать в одном из циклов, написав,чтоб считало до sizeof(z), и получается,что начальная инициализация в 50 символов будет проигнорированна?
нет. это значит что в листинге поправить одну циферку нада, а не 10 циферок (при коде в 1000 строк) отыскивать 10 циферок сложновато.
0
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:44  [ТС]
Извиняюсь что перебил,я по поводу кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
        char z[50]; 
        int a = 0;
        int b = 0;
        cout << "Please, enter the string: ";
        cin.getline(z,sizeof(z));
 
        for (int i=0; i<sizeof(z); i++)
            if (z[i] == 'a' || z[i] == 'A') a++;
 
        for (int i=0; i<sizeof(z); i++)
            if (z[i] == 'b' || z[i] == 'B') b++;
 
        cout << "Count of 'a' is "<< a << endl;
        cout << "Count of 'b' is "<< b << endl;
 
        system("pause"); 
        return 0;
}
Почему,какой-т остранный вывод?
Вот фото:
Что такое 3 и что такое 1?
Миниатюры
Функция С++ getline()  
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 00:53
Цитата Сообщение от ISergey Посмотреть сообщение
И минимум переносимости кода.
ну это извечный баг системщика)

Не по теме:

p.s: :drink: чтоб Шумахер таки учавствовал в следующем гран-при!



Добавлено через 3 минуты 1 секунду
Цитата Сообщение от Golovastik Посмотреть сообщение
Почему,какой-т остранный вывод?
Вот фото:
Что такое 3 и что такое 1?
попробуй так (возможно муссор поподает):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
    char z[50] = {'\0'}; 
    int a = 0;
    int b = 0;
    cout << "Please, enter the string: ";
    cin.getline(z,sizeof(z));
 
    for (int i=0; i<sizeof(z); i++)
        if (z[i] == 'a' || z[i] == 'A') a++;
 
    for (int i=0; i<sizeof(z); i++)
        if (z[i] == 'b' || z[i] == 'B') b++;
 
    cout << "Count of 'a' is "<< a << endl;
    cout << "Count of 'b' is "<< b << endl;
 
    system("pause"); 
    return 0;
}
0
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:58  [ТС]
Та ну,вообще нули пошли. А по поводу чтоб неморочить голову, попробывал вот так, но не выходит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
      string b;
      cout<<"Vvedite chelovek -> ";
      cin.getline(b,string);
      cout<<b;
 
cin.get();
}
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:02
Golovastik, ты какой компилятор используешь?

Добавлено через 1 минуту 9 секунд
gcc и vcc нормально компилируют.
0
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:03  [ТС]
Студию 2005, ответьте пожалуйста на 2 часть вопроса.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:10
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <string>
 
int main() 
{
    string str;
    cout << "Please, enter the string:" << endl;
    getline(std::cin, str);
    cout << str << '\n';
    system("pause");
    return 0;
}
0
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:17  [ТС]
Выводит то,что ввёл, а не количество символов.
Скажите,а чтоб не использовать getline(std::cin, str);
Я имею ввиду, std:: ,можно как-то написать юзинг намеспасе стд,чтоб не вводить постоянно стд.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:19
Цитата Сообщение от Golovastik Посмотреть сообщение
Я имею ввиду, std:: ,можно как-то написать юзинг намеспасе стд,чтоб не вводить постоянно стд.
для этого и пишут юзинг нэймспейс стд, чтобы не писать постоянно стд::
0
 Аватар для Golovastik
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:21  [ТС]
А код, не выводит количество введённых символов,если написать вот так. В вашем случае,тоже не выводит.
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
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:24
Цитата Сообщение от Golovastik Посмотреть сообщение
А код, не выводит количество введённых символов,если написать вот так.
да ну?

тебе явно не хватает теоретических сведений. Почитай учебники. string - это класс, а не тип данных. strlen - работает для си-строк char*. Для подсчета введенных символов, используется метод класса string. Почитай учебник.
0
Maniac
Эксперт С++
 Аватар для ISergey
1465 / 966 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
30.07.2009, 01:33
C++
1
cout << strlen(str) << '\n';
мда.. так нужно
C++
1
std::cout << str.size() /* or str.length() */ << '\n';
std::string
0
 Аватар для mirso
562 / 373 / 55
Регистрация: 05.04.2009
Сообщений: 767
30.07.2009, 08:34
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 / 2
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 22:19  [ТС]
Вот так работает.
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
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.07.2009, 22:26
size() - по синтаксису понятно, что это метод, по имени понятно, что это размер. Вывод: это метод который возвращает размер str
getline(cin, str); - считывание строки. Логично предположить, что cin - это поток ввода, str - куда собственно выводится содержимое этого потока
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
30.07.2009, 23:11
Вывод: это метод который возвращает размер str
Отлично!
А что есть размер str ?
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
30.07.2009, 23:15
естественно количество символов в str
0
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
07.10.2009, 16: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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2009, 16:40

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

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

Функция cin.getline()
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;Windows.h&gt; #include&lt;cstring&gt; using namespace std; struct ArrayInfo { char**...

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru