Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

Восстановить пароль
Повторная активизация e-mail

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

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

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

Код:

#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
Репутация: 0
По умолчанию

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

Код:

#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
Репутация: 736
По умолчанию

Цитата:
Сообщение от 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
Репутация: 10
По умолчанию

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

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

Цитата:
Сообщение от 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
Репутация: 0
По умолчанию

Через указатели выводит не тот результат, выводит просто то,что я ввёл, а не количество символов. Скажите,я попробывал этот же код,только изменил в одном месте. Это будет коректно считаться, как у нормальных людей, или нет?
если что не так,исправьте пожалуйста,тоесть скажите в каклм месте.Слышал про какой-то 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
Репутация: 736
По умолчанию

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


19:58.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru