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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2011, 17:38   #1
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию С++|Проблема с cin.get()

Подскажите, почему не работает эта функция в моем коде?
Код:
#include <iostream>										//отвечает за потоки
#include <clocale>										//отвечает за локаль
#include <string>										//отвечает за строки(это НЕ тоже самое что и string.h)
int main(int argc, char* argv[]){						//можно передать аргументы через командную строку.        
std::setlocale(LC_ALL,"Russian_Russia.866");			//подключение русской локали
	double temperatureTwo=1e-3;							//инициализация переменной типа 0.0
	std::wstring str_sum;
	int temperatureOne=1e2,size_str_2, find_point;	    //инициализация целочисленной переменной
	std::wstring str_2;									//инициализация строки без указания содержимого                            
	std::wstring str(L"Казнить нельзя помиловать!");	// строка с указаннием содержимого
	    std::cout.precision(4);							//сообщает cout(wcout) сколько знаков выводить на экран
		std::cout.width(20);							//определяет поле выводимого сообщения, текст будет прижат к левому краю.
		std::cout<<temperatureOne+temperatureTwo<<std::endl;
		std::cout.precision(6);
		std::cout.width(20);
		std::cout<<temperatureOne+temperatureTwo<<std::endl;
		str.insert(14,L",");							//вставляет указанную строку в строку str, не место 14 символа
		std::wcout<<str[6]<<std::endl;					//выводит шестой символ
		std::wcout<<str.at(4)<<std::endl;				//выводит четвертый сомвол
		std::wcout.width(40);
        std::wcout<<str<<std::endl;
		std::wcout<<str.size()<<std::endl;
		std::wcout<<L"Введите слово для поиска:"<<std::endl;
		std::wcin>>str_2;
		size_str_2=str_2.size();						//size()-определяет размер строки
		find_point=str.find(str_2);						//find()-ищет указанную строку в строке str
		if (find_point>=0)
			for(int i=find_point;i<find_point+size_str_2;i++)
				std::wcout<<str.at(i);
		
		else
			    std::wcout<<L"Ошибка!"<<std::endl;
		str_sum=str.append(str_2);
		std::wcout<<str_sum<<std::endl;
	std::wcout<<std::endl;
 std::wcin.get();
 return 0;
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 14.07.2011, 18:22   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Код:
std::wcin.get();
А почему не
Код:
std::cin.get();
?
_-Re@l-_ вне форума Ответить с цитированием
Старый 14.07.2011, 18:29   #3
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Каждый раз, когда вы вводите что-либо через cin (wcin), у вас в буфере остается символ переноса строки, который вы нажали для завершения ввода. Например, ваш код:
Код:
std::wcin>>str_2;
Пользователь вводит, допустим, "абв\n". Так "абв" помещается в переменную, а '\n' - перенос строки - остается в буфере. Поэтому после каждого ввода подобным образом нужно очищать буфер от этого символа:
Код:
std::wcin>>str_2; std::wcin.get();
Теперь "абв" поместится в переменную, а '\n' будет забрана из буфера методом get(). Если этого не сделать, то получится как раз ваш случай - все работает, просто методу get(), который в конце, достается оставшийся перенос строки.
Ищете информацию по C++?
cplusplus.com

Последний раз редактировалось Сtrl; 14.07.2011 в 18:32.
Сtrl вне форума Ответить с цитированием
Старый 14.07.2011, 18:40   #4
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Сtrl Да действительно, вы правы, спасибо) уже давно мучаюсь этой проблемой)
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 15.07.2011, 10:09   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Довольно старая тема. Вот вам код без комментариев, разъяснения, если нужно, легко найдете на форуме, ибо разъяснялось огромное число раз:
Код:
std::cin.ignore();
std::cin.get();
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с cin Metaron Visual C++ 2 13.06.2011 11:26
Проблема с вводом через cin.get [С++] Subtile Помощь студентам 4 10.03.2010 16:55
проблема с cin.get Dimarik Общие вопросы C/C++ 9 30.04.2009 23:52
cin??? Paul_AG Общие вопросы C/C++ 4 24.04.2009 14:02
Проблема с функцией cin.getline. Подскажите советом. (*_*) Общие вопросы C/C++ 3 04.03.2009 22:43