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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 28.12.2018, 23:14   #1
noir09
 
Регистрация: 28.12.2018
Сообщений: 6
Репутация: 10
По умолчанию подскажите где ошибка

по замыслу моей программы после ввода 1 и -1 я должен ввести название книги после чего она должна записаться в вектор и вывестись оттуда на экран, по почему-то пропускается строчка getline(cin, name); и я возвращаюсь в главное меню
Код:

#include "stdafx.h"
#include <iostream>
#include "string"
#include <vector>
#include "windows.h"
using namespace std;

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	vector<string> books;
	for (;;)
	{
		system("cls");
		int a;
		cin >> a;
		system("cls");//очистка текста
		if (a == 1)
		{
			cin >> a;
			system("cls");
			if (a == -1)
			{
				string name;
				cout << "Введите название книги" << endl;
				getline(cin, name);// ПРОБЛЕМА В ЭТОЙ СТРОЧКЕ
				books.push_back(name);
				cout << books[0] << endl;
				system("pause");
				continue;
			}
			if (a == 0)continue;


		}
		if (a == 3)break;
		if (a != 1 && a != 2 && a != 3)
		{
			cout << "Неверный код" << endl;
			system("pause");
		}
	}
}

причем отдельно эта часть кода нормально работает
Код:

#include "stdafx.h"
#include <iostream>
#include "string"
#include <vector>
#include "windows.h"
using namespace std;

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	
	vector<string> books;
	string name;
	cout << "Введите название книги" << endl;
	getline(cin, name);
	books.push_back(name);
	cout << books[0] << endl;
	system("pause");
}

noir09 вне форума   Ответить с цитированием
Старый 28.12.2018, 23:42   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,272
Репутация: 2465
По умолчанию

Вычитайте перевод строки или cin.ignore, или что-то подобное перед вводом...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 29.12.2018, 00:26   #3
noir09
 
Регистрация: 28.12.2018
Сообщений: 6
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вычитайте перевод строки или cin.ignore, или что-то подобное перед вводом...
извините, но я вас не понял
noir09 вне форума   Ответить с цитированием
Старый 29.12.2018, 08:04   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,272
Репутация: 2465
По умолчанию

Давайте медленно:
1. cin буферизированн
2. когда вы что-то вводите в программу, например, 111 и жмете ентер - на самом деле в буфере будет лежать "111\n"
3. форматированный ввод ">>" не вычитывает "\n"
4. getline по умолчанию читает до "\n"
5.
Цитата:
Сообщение от p51x Посмотреть сообщение
ычитайте перевод строки или cin.ignore, или что-то подобное перед вводом
Дошло?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 29.12.2018, 12:27   #5
noir09
 
Регистрация: 28.12.2018
Сообщений: 6
Репутация: 10
По умолчанию

но я даже не ввожу данные в name или вы про int a, в name находится ""
noir09 вне форума   Ответить с цитированием
Старый 29.12.2018, 12:30   #6
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 14,272
Репутация: 2465
По умолчанию

Цитата:
Сообщение от noir09 Посмотреть сообщение
но я даже не ввожу данные в name или вы про int a
Цитата:
Сообщение от p51x Посмотреть сообщение
1. cin буферизированн
Причем тут name или a?

Цитата:
Сообщение от noir09 Посмотреть сообщение
в name находится ""
Именно. Потому что
Цитата:
Сообщение от p51x Посмотреть сообщение
4. getline по умолчанию читает до "\n"
А до "\n" там осталось "".
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 29.12.2018, 14:22   #7
noir09
 
Регистрация: 28.12.2018
Сообщений: 6
Репутация: 10
По умолчанию

спасибо добрый человек, ввел cin.ignore(256, '\n'); и все заработало.
noir09 вне форума   Ответить с цитированием
Старый 05.01.2019, 12:12   #8
lobotaka
 
Регистрация: 05.01.2019
Сообщений: 4
Репутация: 10
По умолчанию

Добрый день.
Не стал захламлять форум отдельной темой, поэтому решил написать здесь. Подскажите, пожалуйста, для чего в данном коде нужны эти символы, когда и без них компилирует тоже самое? Данный пример приведен в учебнике.
Изображения
Тип файла: jpg Безымянный.jpg (71.7 Кб, 0 просмотров)
lobotaka вне форума   Ответить с цитированием
Старый 05.01.2019, 12:41   #9
digitalis
Профессионал
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 1,514
Репутация: 513
По умолчанию

Нормально компилируется - еще не значит, что будет выполняться как задумано. Без этих символов текст будет выводиться без кавычек " , а так - с ними.
см. http://all-ht.ru/inf/prog/c/func/printf.html таблица 4
digitalis вне форума   Ответить с цитированием
Старый 05.01.2019, 13:02   #10
lobotaka
 
Регистрация: 05.01.2019
Сообщений: 4
Репутация: 10
По умолчанию

Спасибо!
lobotaka вне форума   Ответить с цитированием
Ответ

Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите где ошибка champion92 Общие вопросы C/C++ 2 09.12.2009 20:21
подскажите,где ошибка. Pti44ka Общие вопросы по Java, Java SE, Kotlin 2 06.09.2009 02:02
Подскажите где ошибка Ximer Паскаль 5 13.04.2009 13:41
Подскажите где ошибка?! DJEDY Общие вопросы C/C++ 1 07.04.2009 16:33
Подскажите где ошибка? lubafffka Помощь студентам 2 17.12.2008 20:02


17:20.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru