Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

по замыслу моей программы после ввода 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, 22:42   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

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

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

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

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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