Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2009, 23:36   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Функция С++ getline()

Здравсвуйте! Скажите пожалуйста, каков смысл функции cin.getline(). Если не сложно,привидите пожалуйста пример.
Golovastik вне форума Ответить с цитированием
Старый 28.07.2009, 23:42   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Служит для заполнения массива из входного потока (на сколько мне известно).

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
  const int MAX = 10;
  char d[MAX];
  cout << "Enter word: ";
  cin.getline(d, MAX);
  cout.write(d, MAX) << endl;
  getch();
  return 0;
}
Результат
Код:
Enter word: Hello World!
Hello Wor
psycho-coder вне форума Ответить с цитированием
Старый 29.07.2009, 00:24   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Попробывал так наваять,но чего-то не вышло, не могу понять почему.

Код:
#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();
}
Golovastik вне форума Ответить с цитированием
Старый 29.07.2009, 01:18   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение
Попробывал так наваять,но чего-то не вышло, не могу понять почему.

Код:
#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();
}
Ну не странно
Во-первых ф-ция main, объявленная таким образом должна возвращать значение, во-вторых while(b[50] != '\0') даёт бесконечный цикл, так как если 51-й(именно 51-й, за пределами массива) элемент массива b изначально не равен 0, то и никогда не будет, вы ведь его нигде не меняете внутри тела цикла )

Последний раз редактировалось netrino; 29.07.2009 в 01:21.
netrino вне форума Ответить с цитированием
Старый 29.07.2009, 02:08   #5
rangerx
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 46
По умолчанию

на самом деле здесь цикл и ненужен
этого вполне достаточно: cout << "Rezylt = " << b;
rangerx вне форума Ответить с цитированием
Старый 29.07.2009, 04:07   #6
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

ТС - вы думаете что на разных форумах получете разный ответ (вы ошибались) (случайно не ваша тема - http://www.cyberforum.ru/cpp-beginners/thread45411.html ???)
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 29.07.2009, 08:13   #7
Vladss
 
Аватар для Vladss
 
Регистрация: 28.07.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение
Попробывал так наваять,но чего-то не вышло, не могу понять почему.

Код:
#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();
}
а)действительно, достаточно cout << "Rezylt = " << b;
в)а если все-таки говорить о цикле, то обрати внимание, что b[50] нигде не увеличивается, поэтому и самого цикла фактически не происходит...
Имхо можно городить огород через указатель:
Код:
#include <iostream>
using namespace std;
int main()
{
	char b[50]; int k = 0;
	cout<<"Vvedite-> ";
	cin.getline(b,50);
	char *s = b; //указатель на начало массива
	cout<<"Rezylt = ";
	while(*s) //вращать, пока не достигнем конца введенной строки
		cout << *s++; //инкремент
	cout << endl;
	system("pause"); //раз уж подключили <iostream>
	return 0;
}
Удачи.....

Последний раз редактировалось MaTBeu; 29.07.2009 в 10:15.
Vladss вне форума Ответить с цитированием
Старый 29.07.2009, 23:43   #8
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Через указатели выводит не тот результат, выводит просто то,что я ввёл, а не количество символов. Скажите,я попробывал этот же код,только изменил в одном месте. Это будет коректно считаться, как у нормальных людей, или нет?
если что не так,исправьте пожалуйста,тоесть скажите в каклм месте.Слышал про какой-то strlen,но не в курсе. Заранне благодарю.

Код:
#include <iostream>
using namespace std;
 
int main()
{
        char b[50]; int k = 0;
        cout<<"Vvedite-> ";
        cin.getline(b,50);
        while(b[k]!='\0')
                k++;
        cout<<"Rezylt = "<<k;
        cin.get();
}

Последний раз редактировалось Golovastik; 29.07.2009 в 23:55.
Golovastik вне форума Ответить с цитированием
Старый 30.07.2009, 00:20   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение
Через указатели выводит не тот результат, выводит просто то,что я ввёл, а не количество символов. Скажите,я попробывал этот же код,только изменил в одном месте. Это будет коректно считаться, как у нормальных людей, или нет?
если что не так,исправьте пожалуйста,тоесть скажите в каклм месте.Слышал про какой-то strlen,но не в курсе. Заранне благодарю.

Код:
#include <iostream>
using namespace std;
 
int main()
{
        char b[50]; int k = 0;
        cout<<"Vvedite-> ";
        cin.getline(b,50);
        while(b[k]!='\0')
                k++;
        cout<<"Rezylt = "<<k;
        cin.get();
}
Код:
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
        char b[50];
        cout<<"Vvedite-> ";
        cin.getline(b,50);
        cout<<"Rezylt = "<< strlen(b);
        cin.get();
}
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция SL1CK Помощь студентам 3 07.06.2009 17:36
ИФ функция fatal_err0r Microsoft Office Excel 2 18.03.2009 17:05
Проблема с функцией cin.getline. Подскажите советом. (*_*) Общие вопросы C/C++ 3 04.03.2009 22:43
функция Janette Помощь студентам 1 29.04.2008 20:10
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50