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

cin.getline работает через раз - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Шаблоны функций и классов http://www.cyberforum.ru/cpp-beginners/thread400013.html
Нужносоздать шаблон функции возведения заданного числа в заданную степень (аналог функции pow() ). Шаблон класа Класс: матрица. Свойства: размеры, элементы матрицы. Методы: конструктор с параметрами, вычисление суммы элементов на главной диагонали.
C++ Дружественные функции и классы 1. Класс Пациент (имя, диагноз, рецепт, номер карты); 2. Класс Зав. отделением (имя) Описание предметной области – зав. отделением может менять номер карты пациента . Пожалуйсто помогите!!! Добавлено через 1 минуту Каждый класс должен реализовывать метод show, который отображает на экране все свойства данного объекта. Вызов дружественной функции должен сопровождаться выводом сообщения о... http://www.cyberforum.ru/cpp-beginners/thread400010.html
ПЕРЕГРУЗКА ФУНКЦИЙ. ПЕРЕГРУЗКА ОПЕРАТОРОВ. C++
1. Функция нахождения самого длинного слова (два, три и четыре слова). 2. Описать класс одномерный массив (вектор) целых чисел. Перегрузить следующую операцию: > присвоить всем элементам вектора заданное значение. Помогите пожалуйсто очнь надо! Только попроще!!!
C++ Абстрактные базовые классы
Помогите решить пожалуйста!) Задание 1 . Создать базовый класс - фигура, и производные класс - круг, прямоугольник, трапеция. Определить виртуальные функции площадь, периметр и вывод на печать. Задание 2 . Создать абстрактный базовый класс с виртуальной функцией - сумма прогрессии. Создать производные классы: арифметическая прогрессия и геометрическая прогрессия. Каждый класс имеет два поля...
C++ Ввод имени файла с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread399999.html
Всем привет! Хочу сделать так: int main() { char finame; printf("Enter the name of file: "); scanf_s("%s", &finame); FILE *f = fopen(finame, 'r'); if(!f) printf ("Error!");
C++ Поставить в начало последовательности нули, а затем единицы 1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
06.12.2011, 14:17     cin.getline работает через раз
Цитата Сообщение от GBIT Посмотреть сообщение
не знаю. но получается в моем первом варианте
C++
1
cout<<directory<<"\n";
должен был вернуть содержимое var.
C++
1
2
3
сin>>var;                      // подаю в него допустим "123"
cin.getline(directory, sizeof(directory));     // допустим скушал 123
cout<<directory<<"\n";      // по идее должен вернуть 123. но он выводит ничего
отладчик выдает что после строчки cin.getline directory содержит 0.
хотелось бы обойтись без scanf
1. Внимательно прочитайте какую-нить книжку по С++ о вводе выводе. Минимально - 14 главу из моей книги по С++.ООП. Тут на форуме я кое-что постил из нее - поищите мои сообщения.
2. Мыслите вы неправильно. Мы имеем дело с ПОТОКОМ символов. Символы, которые УЖЕ прочитаны, можно ВЕРНУТЬ в поток. Если не возвращать, то их уже нет, повторно их прочитать невозможно.
Поэтому:
cin >> var; скушал 123 - из буфера ввода эти символы удалены. А в буфере осталось enter - символ, который является окончанием ввода целого.
Далее начинает getline и он видит тот самый enter (никаких 123 уже нет - они уже "отыграны" предыдущим вводом). И заканчивает работу, совершенно справедливо полагая ноль в качестве длины строки.
3. Enter по-любому надо "отыграть" - например, проигнорировать. Посмотрите еще метод ignore().
 
Текущее время: 08:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru