• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проблема с Getline()

  • Автор темы Schummi
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Schummi

Использую VS6.0 SP6.
Есть проблем с getline():

код C++
Код:
#include <iostream>
#include <string>
using namespace std;

int main()
{
string s1,s2;

cout<<"Input 1 string:";
getline(cin,s1);
cout<<"Output 1 string:"<<s1<<endl;

cout<<"Input 2 string:";
getline(cin,s2); 
cout<<"Outpit 2 string:"<<s2<<endl;

return 0;
}
пример работы проги, ([Enter] - имеется в виду нажатие клавиши enter):

Input 1 string:abcdef[Enter] - тут ввод s1 должен завершитсья(getline c двумя аргументами)
123456[Enter] - однако ввод продолжается - и это явно ошибка компилятора
Output 1 string:abcdef -вывели s1 и пока все верно
Input 2 string:ABCDEF[Enter] -тут ввод s2 завершился, но примерно понятно почему - из-за второго [enter] при первом вводе
Output 2 string:123456 -выводим s2, но это не ABCDEF как должно было быть, а "остатки" потока после ввода s1
Press any key to continue

лазил по сайту искал подобную тему, но ненашел...
если кто знает дайте ссылки - проблема и так ясна, ну или пример кода как этого избежать

в другом но менее мощном и удобном компиляторе
все робит номально...[/size]
 
E

European

Если я правильно вспоминаю, то реализация getline в VS6 оставляет '\n' в потоке. Потому и баг
 
E

European

Вот как этот баг пофиксить -

А вот официально:
 
G

gamecreator

а по-моему лучше использовать метод
 
G

gamecreator

ну я не наблюдал там таких багов
(и там же написано "по-моему")
 
E

European

Это баг 11-летней давности. Это повод отказываться от более удобной в обращении функции?

Тем более, что его можно исправить и без кромсания стандартных файлов
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!