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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 307, средняя оценка - 4.87
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
28.07.2009, 23:37     Функция С++ getline() #1
Здравствуйте! Скажите пожалуйста, каков смысл функции cin.getline(). Если не сложно,приведите пожалуйста пример.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2009, 23:37     Функция С++ getline()
Посмотрите здесь:

функция getline() в dev_C++ C++
C++ Функция getline в условии while
C++ Не работает функция getline !
Функция getline C++
Не выполняется функция getline() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:30  [ТС]     Функция С++ getline() #21
Тоесть изменение можно сделать в одном из циклов, написав,чтоб считало до sizeof(z), и получается,что начальная инициализация в 50 символов будет проигнорированна?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
30.07.2009, 00:35     Функция С++ getline() #22
Цитата Сообщение от 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;
}
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 00:40     Функция С++ getline() #23
Цитата Сообщение от ISergey Посмотреть сообщение
можно использовать std::string и не морочить себе голову


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

Добавлено через 2 минуты 37 секунд
Цитата Сообщение от Golovastik Посмотреть сообщение
Тоесть изменение можно сделать в одном из циклов, написав,чтоб считало до sizeof(z), и получается,что начальная инициализация в 50 символов будет проигнорированна?
нет. это значит что в листинге поправить одну циферку нада, а не 10 циферок (при коде в 1000 строк) отыскивать 10 циферок сложновато.
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:44  [ТС]     Функция С++ getline() #24
Извиняюсь что перебил,я по поводу кода:
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()  
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 00:53     Функция С++ getline() #25
Цитата Сообщение от ISergey Посмотреть сообщение
И минимум переносимости кода.
ну это извечный баг системщика)

Не по теме:

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



Добавлено через 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;
}
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 00:58  [ТС]     Функция С++ getline() #26
Та ну,вообще нули пошли. А по поводу чтоб неморочить голову, попробывал вот так, но не выходит.
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();
}
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:02     Функция С++ getline() #27
Golovastik, ты какой компилятор используешь?

Добавлено через 1 минуту 9 секунд
gcc и vcc нормально компилируют.
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:03  [ТС]     Функция С++ getline() #28
Студию 2005, ответьте пожалуйста на 2 часть вопроса.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:10     Функция С++ getline() #29
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;
}
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:17  [ТС]     Функция С++ getline() #30
Выводит то,что ввёл, а не количество символов.
Скажите,а чтоб не использовать getline(std::cin, str);
Я имею ввиду, std:: ,можно как-то написать юзинг намеспасе стд,чтоб не вводить постоянно стд.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:19     Функция С++ getline() #31
Цитата Сообщение от Golovastik Посмотреть сообщение
Я имею ввиду, std:: ,можно как-то написать юзинг намеспасе стд,чтоб не вводить постоянно стд.
для этого и пишут юзинг нэймспейс стд, чтобы не писать постоянно стд::
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 01:21  [ТС]     Функция С++ getline() #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;
}
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
30.07.2009, 01:24     Функция С++ getline() #33
Цитата Сообщение от Golovastik Посмотреть сообщение
А код, не выводит количество введённых символов,если написать вот так.
да ну?

тебе явно не хватает теоретических сведений. Почитай учебники. string - это класс, а не тип данных. strlen - работает для си-строк char*. Для подсчета введенных символов, используется метод класса string. Почитай учебник.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
30.07.2009, 01:33     Функция С++ getline() #34
C++
1
cout << strlen(str) << '\n';
мда.. так нужно
C++
1
std::cout << str.size() /* or str.length() */ << '\n';
std::string
mirso
523 / 341 / 17
Регистрация: 05.04.2009
Сообщений: 709
30.07.2009, 08:34     Функция С++ getline() #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';
Golovastik
 Аватар для Golovastik
11 / 11 / 0
Регистрация: 25.05.2009
Сообщений: 435
30.07.2009, 22:19  [ТС]     Функция С++ getline() #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);
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
30.07.2009, 22:26     Функция С++ getline() #37
size() - по синтаксису понятно, что это метод, по имени понятно, что это размер. Вывод: это метод который возвращает размер str
getline(cin, str); - считывание строки. Логично предположить, что cin - это поток ввода, str - куда собственно выводится содержимое этого потока
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
30.07.2009, 23:11     Функция С++ getline() #38
Вывод: это метод который возвращает размер str
Отлично!
А что есть размер str ?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
30.07.2009, 23:15     Функция С++ getline() #39
естественно количество символов в str
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2009, 16:40     Функция С++ getline()
Еще ссылки по теме:

Функция getline и ifstream C++
Не работает функция getline(); C++
Функция cin.getline() C++

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

Или воспользуйтесь поиском по форуму:
Lorr
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
07.10.2009, 16:40     Функция С++ getline() #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 ?

Поправте где неправ ...
Yandex
Объявления
07.10.2009, 16:40     Функция С++ getline()
Ответ Создать тему

Метки
ввод/вывод c++
Опции темы

Текущее время: 12:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru