Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
delexa
2 / 2 / 4
Регистрация: 02.03.2011
Сообщений: 134
#1

В чем отличия cin.getline от gets? - C++

07.02.2013, 13:23. Просмотров 1340. Ответов 13
Метки нет (Все метки)

Напрмер, записи
C++
1
gets(str)
от
C++
1
cin.getline(str, 1000)
что лучше использовать?
http://www.cyberforum.ru/cpp-beginners/thread1839048.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 13:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В чем отличия cin.getline от gets? (C++):

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get...

Отличие функции cin.get и cin.getline
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем,...

Отличие getline() от cin.getline()
Чем отличается getline() от cin.getline() ?

Не работает ни cin.Get(), ни cin.Getline()
#include "stdafx.h" #include <iostream> #include "conio.h" #include...

getline(cin, str) и cin>>
Добрый день. Есть код: ... string str; int N; cin>> N; getline(cin, str);...

13
Kuzia domovenok
2207 / 1976 / 443
Регистрация: 25.03.2012
Сообщений: 6,923
Записей в блоге: 1
07.02.2013, 14:34 #2
как больше нравится. но сравнивать было бы корректнее
cin.getline с gets_s
1
ya_noob
_
314 / 148 / 27
Регистрация: 08.10.2011
Сообщений: 432
07.02.2013, 14:42 #3
gets не безопасен в том плане, что не контролирует количество считываемых символов, так что тут лучше будет cin.getline.
Но с другой стороны gets работает быстрее.
1
Kuzia domovenok
2207 / 1976 / 443
Регистрация: 25.03.2012
Сообщений: 6,923
Записей в блоге: 1
07.02.2013, 14:56 #4
Цитата Сообщение от ya_noob Посмотреть сообщение
gets не безопасен в том плане, что не контролирует количество считываемых символов, так что тут лучше будет cin.getline.
Но с другой стороны gets работает быстрее.
Для безопасности есть gets_s с ним сравнивать корректнее.
И это не повод отказываться от gets_s
1
ya_noob
_
314 / 148 / 27
Регистрация: 08.10.2011
Сообщений: 432
07.02.2013, 15:04 #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Для безопасности есть gets_s с ним сравнивать корректнее.
И это не повод отказываться от gets_s
да вообще это сравнение getline и gets не корректно, зачем смешивать c++ и с
0
Kuzia domovenok
2207 / 1976 / 443
Регистрация: 25.03.2012
Сообщений: 6,923
Записей в блоге: 1
07.02.2013, 15:09 #6
C - это часть C++. И то как некоторые здесь утверждали "Си устарел" - это совершенная чепуха

Не по теме:

Не уверен, может есть какие-то нюансы языка Си, что не скомпилируются компилятором С++. Скорее всего нет.

1
Croessmah
07.02.2013, 15:15
  #7

Не по теме:

Не все, что скомпилируется Си'шным компилятором, скомпилируется компилятором Си++. Таких кодов вагон и огромная тележка

1
ya_noob
_
314 / 148 / 27
Регистрация: 08.10.2011
Сообщений: 432
07.02.2013, 15:34 #8
а я и не говорю про устаревшие. просто getline работает с одним потоком, а gets с другим и их смешивание я считаю создаст трудности
0
silent_1991
Эксперт С++
5007 / 3065 / 270
Регистрация: 11.11.2009
Сообщений: 7,043
Завершенные тесты: 1
11.02.2013, 13:37 #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение

Не по теме:

Не уверен, может есть какие-то нюансы языка Си, что не скомпилируются компилятором С++. Скорее всего нет.

Банально:
C
1
2
3
4
5
6
7
8
9
10
#include <stdlib.h>
 
int main(void)
{
    int *arr = NULL;
    
    arr = malloc(42 * sizeof(*arr));
    
    return 0;
}
C: compilation successful;
C++: error: invalid conversion from 'void*' to 'int*'
Более того, есть коды, которые на С и на С++ дадут разные результаты. Всем известен пример с sizeof('c').
0
Kastaneda
11.02.2013, 13:44
  #10

Не по теме:

или вот

C
1
2
3
4
void func (n) int n
{
   // body
}
K&R проповедуют этот синтаксис.

0
silent_1991
11.02.2013, 14:28
  #11

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение

Не по теме:

или вот

C
1
2
3
4
void func (n) int n
{
   // body
}
K&R проповедуют этот синтаксис.

Может:
C
1
2
3
4
void func (n) int *n;
{
   /* body */
}
?

0
Kastaneda
11.02.2013, 16:12
  #12

Не по теме:

silent_1991, может. Я честно говоря этим синтаксисом ни разу в жизни не пользовался, так что в голове не отложилось.

0
xtorne21st
интересующийся
304 / 275 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
11.02.2013, 17:02 #13
Цитата Сообщение от ya_noob Посмотреть сообщение
gets не безопасен в том плане, что не контролирует количество считываемых символов, так что тут лучше будет cin.getline.
Но с другой стороны gets работает быстрее.
Можно воспользоваться "безопасным" fgets(str, 1000, stdin);
0
Kuzia domovenok
2207 / 1976 / 443
Регистрация: 25.03.2012
Сообщений: 6,923
Записей в блоге: 1
11.02.2013, 21:24 #14
Цитата Сообщение от xtorne21st Посмотреть сообщение
Можно воспользоваться "безопасным" fgets(str, 1000, stdin);
gets_s(str, 1000);
https://buildsecurityin.us-cert.gov/...g/300-BSI.html
0
11.02.2013, 21:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 21:24
Привет! Вот еще темы с решениями:

Cin вместо cin.getline
#include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;fstream&gt; using namespace...

cin.getline и cin.ignore
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то...

getline(cin,a);
Почемй когда я пишуgetline(cin,a); ничего не выполняется. Т.е. это не...

cin.getline()
Вопрос заключается в следующем, собственно программа отказывается выполнять...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru