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

Строка getline() C++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 177, средняя оценка - 4.81
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
27.12.2010, 12:00     Строка getline() C++ #1
Ув. программисты! Подскажите пожалуйста новичку в чём проблема этой проги. Программа запрашивает строчку, выводит на экран эту строчкук и её размер. Потом запрашивает 2-ю строчку и тоже выводит размер. Вроде всё просто. Но! Ввожу 1 сточку, и что бы её вывело вместе с размером надо нажать Enter 2 раза. И соответственно дальше программа корректно не выполняется. Понимаю, что где-то ошибка, но решить никак не получается - опыта мало. Буду очень благодарен за Вашу помощ! Вот код. Компилятор VC 6.0 Заранее благодарен!


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
 
int main() 
{
    string line, line2;
    cout << "Please, enter first line:" << endl;
    getline(cin, line);
        cout << line.size();
        cout << "Please, enter second line:" << endl;
    getline(cin, line2);
        cout << line2.size();
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2010, 12:00     Строка getline() C++
Посмотрите здесь:

getline C++
getline C++
getline C++
Getline C++
getline(cin, ); C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
27.12.2010, 13:08     Строка getline() C++ #2
странно, у меня программа выполняется.
может быть во входном потоке остается символ перевода строки, раз getline прекращает чтение.
помести между двумя вызовами getline
C++
1
cin.ignore(100,'\n');
и в начале главной функции пропишите локаль
C++
1
setlocale(LC_CTYPE, "Rus");
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
27.12.2010, 14:09  [ТС]     Строка getline() C++ #3
Спасибо! Доберусь до своего компа и проверю с Вашим дополнением. Можно ещё кое -что уточнить. Когда Вы запустили мою программу, то она корректно выполнилась: запросила строку, вывела её и размер и без глбков тоже и со второй строкой?
RUSya82
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
27.12.2010, 14:13     Строка getline() C++ #4
Цитата Сообщение от Romiys Посмотреть сообщение
Спасибо! Доберусь до своего компа и проверю с Вашим дополнением. Можно ещё кое -что уточнить. Когда Вы запустили мою программу, то она корректно выполнилась: запросила строку, вывела её и размер и без глбков тоже и со второй строкой?
так точно
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
27.12.2010, 14:18  [ТС]     Строка getline() C++ #5
Ещё раз Спасибо за Ваш комментарий!
Platinumix
43 / 11 / 0
Регистрация: 28.12.2012
Сообщений: 190
11.03.2013, 02:48     Строка getline() C++ #6
у меня все заработало нормально на ms visual studio...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.03.2013, 11:55     Строка getline() C++ #7
Цитата Сообщение от RUSya82 Посмотреть сообщение
может быть во входном потоке остается символ перевода строки, раз getline прекращает чтение.
Вообще-то, getline() извлекает '\n' из потока...
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
11.03.2013, 12:37     Строка getline() C++ #8
basic_istream::getline
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.03.2013, 13:11     Строка getline() C++ #9
Avazart, там другое. Там ввод через cin >> присутствует, а здесь только getline() работает, поэтому и непонятно.
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
11.03.2013, 16:58     Строка getline() C++ #10
Цитата Сообщение от alsav22 Посмотреть сообщение
ам ввод через cin >> присутствует, а здесь только getline() работает
Во первых разница ?
Во вторых глаза разуйте...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.03.2013, 17:36     Строка getline() C++ #11
Цитата Сообщение от Avazart Посмотреть сообщение
Во первых разница ?
Между небом и землёй? Тут getline() читает со стандартного входного потока (консоль) до '\n'. getline() его извлекает из потока, поэтому никакого '\n' в потоке не остаётся. А если так: cin >> , то чтение идёт из стандартного входного потока (консоль) с помощью оператора >>. После его работы в потоке остаётся '\n'. Если дальше идёт чтение с помощью getline(), то она считывается его первым и код идёт дальше. Из-за этого вопросы. В этом коде ничего подобного не происходит. Всё нормально работает.
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
09.04.2015, 13:50     Строка getline() C++ #12
Подскажите плз.Почему после запуска кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <string>
 
using namespace std;
 
 
 
int main()
{
 const int size=100;
 string array[size];
 cout << "Vvedite slovo: ";
 getline(cin,array[size]);
 
 
   cout << array[size] << " ";
  cout << endl << endl;
 
 system("pause");
 return 0;
}
просит ввести слово,ввожу слово - выводит слово,нажимаю кнопку для выхода и получаю то,что на фото. Что не так с кодом,что он не корректно закрывается и выдает ошибку?
Миниатюры
Строка getline() C++  
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
09.04.2015, 13:57     Строка getline() C++ #13
C++
1
2
getline(cin,array[size-1]); // Последняя в массиве строка size-1, так как нумерация элементов начинается с 0
cout << array[size-1] << " ";
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
09.04.2015, 14:00     Строка getline() C++ #14
Avazart, Спасибо,заработало без ошибок .А еще можешь подсказать пытался сначала запустить через
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <string>
 
using namespace std;
 
 
 
int main()
{
 const int size=100;
 string array[size];
 cout << "Vvedite slovo: ";
 cin.getline(array[size-1]);
 
 
   cout << array[size-1] << " ";
  cout << endl << endl;
 
 system("pause");
 return 0;
}
Так выдает ошибку - [C++ Error] Unit1.cpp(17): E2285 Could not find a match for 'istream::getline(string)' , что я неправильно указываю?
Avazart
 Аватар для Avazart
6901 / 5141 / 252
Регистрация: 10.12.2010
Сообщений: 22,601
Записей в блоге: 17
09.04.2015, 14:02     Строка getline() C++ #15
C++
1
getline(сin,array[size-1]);
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
09.04.2015, 19:05     Строка getline() C++ #16
System16v, зачем тебе массив строк, если вводишь одну?
C++
1
2
3
4
5
 string str;
 cout << "Vvedite stroky: ";
 getline(cin, str);
 
 cout << str << endl;
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
09.04.2015, 21:00     Строка getline() C++ #17
lss, т.к. изначально думал что при вводе слова,оно добавляется в массив по символьно,а не целиком, поэтому и делал так.А как добавить слово в массив посимвольно?Или кроме как вбивания слова через пробел никак не получится?Ну или код например,который был слово разбивал по символам?А то чет даже сообразить не могу,как слово разбить на символы
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
09.04.2015, 21:14     Строка getline() C++ #18
Давай разберёмся. getline() - это функция чтения СТРОКИ, а не слова. getline() будет читать, из буфера ввода, до символа разделителя, указанного в параметрах(если не указан, то до '\n', который попадаёт в буфер ввода при нажатии Enter). Строка может читаться или в массив char (тогда используется cin.getline()), или в объект класса string. Для доступа к отдельным символам (в обоих случаях), есть операция обращения по индексу. Тебе что, собственно, нужно?
System16v
 Аватар для System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
09.04.2015, 21:32     Строка getline() C++ #19
lss, ну я думал что введя слово,оно раздробится на символы и добавится в массив так - например введя "volk" - в массив добавится a[0]=v a[1]=o a[2]=l a[3]=k,но оно добавляется словом как и ввел т.е. a[0]=volk. Потом я хотел сделать так посимвольно.Но как раздробить слово на символы так и не придумал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2015, 21:36     Строка getline() C++
Еще ссылки по теме:

getline() C++
Функция getline C++
Отличие getline() от cin.getline() C++

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

Или воспользуйтесь поиском по форуму:
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
09.04.2015, 21:36     Строка getline() C++ #20
Если в массив поместить отдельные слова из строки, то можно так:
C++
1
2
3
4
5
6
7
8
9
const int size = 100;
     string arr[size];
     cout << "Vvedite stroky: ";
     int i = 0;
     while (cin >> arr[i++] && cin.peek() != '\n');
 
     for (int j = 0; j < i; ++j)
        cout << arr[j] << endl;
     cout << endl;
Добавлено через 1 минуту
Цитата Сообщение от System16v Посмотреть сообщение
ну я думал что введя слово,оно раздробится на символы и добавится в массив так - например введя "volk" - в массив добавится a[0]=v a[1]=o a[2]=l a[3]=k,
У тебя массив строк, а не символов.
Цитата Сообщение от lss Посмотреть сообщение
Строка может читаться или в массив char (тогда используется cin.getline())
Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
     const int size = 100;
     char arr[size];
     cout << "Vvedite stroky: ";
     cin.getline(arr, size);
 
     for (int i = 0; i < strlen(arr); ++i)
        cout << arr[i] << endl;
     cout << endl;
 
     system("pause");
     return 0;
Yandex
Объявления
09.04.2015, 21:36     Строка getline() C++
Ответ Создать тему
Опции темы

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