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

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

28.07.2009, 23:37. Показов 47394. Ответов 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
Ответ Создать тему
Новые блоги и статьи
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru