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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2018, 13:34   #1
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию Игнорирование cin

Здравствуйте!
Я признаю, что пока не приблизился к нормальной логике программиста.
Но всё же..
Как может игнорироваться ввод данных через объект "cin"?
Вроде программа написана логично. Ошибок не даёт. Но "cin" игнорируется!! Игнорируется во второй части программы, когда надо искать в файле вводимое слово. Именно его ввод и игнорируется.
Скажите пожалуйста - почему?
Код:
#include<fstream>
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;
int main()
{
	setlocale(LC_ALL, "rus");
	char ch = 'x';
	int j = 77;
	double d = 6.02;
	string str1;
	//создание файла и запись в него
	ofstream outfile("fdata.txt");
	cout<< "Введите текст для заполнения текстового файла\n";
	cin >> str1;
	outfile << str1; 
	cout << "File save\n";
	//чтение из него
	int x = 0;
	string s1;
	string s2;
	ifstream infile("fdata.txt");
	infile >> s1;
	cout << "Введите слово для поиска.\n";
	cin>>s2;
	s1.find(s2);
	while (s1.size())
	{
		if (s1.find(s2))
			x++;
		s1.find(s2);
	}
	cout << "Слово " << s2 << " в файле обнаружено " << x << " раз.";
	_getch();
	return 0;
}
KAMLS вне форума Ответить с цитированием
Старый 17.01.2018, 13:42   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Выкладывай сразу видео аномального поведения программы в консоли. А то городить проекты влом.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.01.2018, 14:03   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
роде программа написана логично. Ошибок не даёт. Но "cin" игнорируется!!
http://www.cplusplus.com/doc/tutorial/basic_io/

Цитата:
cin and strings
The extraction operator can be used on cin to get strings of characters in the same way as with fundamental data types:
Код:
string mystring;
cin >> mystring;
However, cin extraction always considers spaces (whitespaces, tabs, new-line...) as terminating the value being extracted, and thus extracting a string means to always extract a single word, not a phrase or an entire sentence.
Код:
// cin with strings
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string mystr;
  cout << "What's your name? ";
  getline (cin, mystr);
  cout << "Hello " << mystr << ".\n";
  cout << "What is your favorite team? ";
  getline (cin, mystr);
  cout << "I like " << mystr << " too!\n";
  return 0;
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.01.2018, 14:11   #4
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Выкладывай сразу видео аномального поведения программы в консоли. А то городить проекты влом.
Дак аномальное только то что мимо cin пролетает. Вот скриншот итога.
Я там должен был вводить слово для поиска. Объект string 2. А он не выводит возможность ввода, сам что-то там делает и даёт итог.
Изображения
Тип файла: jpg кадр_14.jpg (64.2 Кб, 122 просмотров)
KAMLS вне форума Ответить с цитированием
Старый 17.01.2018, 14:26   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
Дак аномальное только то что мимо cin пролетает. Вот скриншот итога.
Я там должен был вводить слово для поиска. Объект string 2. А он не выводит возможность ввода, сам что-то там делает и даёт итог.
я имелл в виду скринкаст работы проги под дебаггером. Чо ты мне свой скриншот, ужатый в ноль, показываешь?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.01.2018, 14:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ничего он не пролетает.
вы бы посмотрели, для начала, что записалось в fdata.txt
удивились, что так не совсем то, что Вы вводили.
а потом прочитали пост #3, где дана ссылка на ресурс с объяснением.

p.s. я уже молчу о том, что слова простым вхождением как подстроку в строку искать нельзя.
иначе Вы в фразе "молоко налили в бутылку" легко найдёте и "око" и "мол" и "нал" и "али" и "тыл" и даже "ку"

Последний раз редактировалось Serge_Bliznykov; 17.01.2018 в 14:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.01.2018, 15:33   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

KAMLS, лучше читайте про работу cin.
Допустим, в первый раз ввели строку "привет мир".
слово "привет" уйдёт в строковую переменную, а вот "мир" останется в буфере, ждать своего часа. Когда будет следующий cin, то строка никакая не будет запрашиваться у пользователя, т.к. в буфере уже есть "мир" и просто это слово вернётся.
pu4koff вне форума Ответить с цитированием
Старый 17.01.2018, 15:38   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
KAMLS, лучше читайте про работу cin.
Допустим, в первый раз ввели строку "привет мир".
слово "привет" уйдёт в строковую переменную, а вот "мир" останется в буфере, ждать своего часа. Когда будет следующий cin, то строка никакая не будет запрашиваться у пользователя, т.к. в буфере уже есть "мир" и просто это слово вернётся.
Вот именно поэтому я НИКОГДА не юзал cin/cout. Ну их нах, когда есть printf()/scanf().

И тебе, ТС, советую делать также.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 17.01.2018, 18:22   #9
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Да, мне про буфер сказали сегодня. Но фокус в том, что он выдаёт первое слово sss, а не последнее fff.
На скрине видно. Использовал я getline(cin,str1)
В файле записалось всё как надо, как на скрине: sss ddd fff
Причем тут тогда буфер?..
P.S. Вводить то теперь позволяет!!
Изображения
Тип файла: jpg кадр_15.jpg (107.4 Кб, 112 просмотров)
KAMLS вне форума Ответить с цитированием
Старый 18.01.2018, 06:37   #10
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

find при поиске возвращает номер позиции где расположено слово. Не правильно я им пользовался. Теперь сделал так, но все равно х равен нулю:
Код:
#include<fstream>
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;
int main()
{
	setlocale(LC_ALL, "rus");
	string str1;
	string s1,s2;
	int x = 0;
	int n = 0;
	char ch[20];
	//создание файла и запись в него
	ofstream outfile("fdata.txt");
	cout<< "Введите текст для заполнения текстового файла\n";
	getline(cin,str1);
	outfile << str1; 
	cout << "File save\n";
	//чтение из него
	ifstream infile("fdata.txt");
	infile >> s1;
	cout << "Введите слово для поиска.\n";
	cin>>s2;
	n=s1.find(s2);
	while (s1.size())
	{
		if (n != 0)
			x++;
		n = 0;
		s1.find(s2);
	}
	cout << "Слово " << s2 << " в файле обнаружено " << x << " раз.";
	_getch();
	return 0;
}
KAMLS вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игнорирование нажатия клавиши Marcus75 Помощь студентам 2 19.06.2012 23:14
Игнорирование спецсимволов Даниил_глазко Общие вопросы Delphi 5 15.08.2011 15:39
Игнорирование переадресации Crystallon Общие вопросы Delphi 3 23.05.2010 00:26
игнорирование ошибок frantic150 Microsoft Office Excel 5 26.02.2010 21:10
Игнорирование ошибок mephist Microsoft Office Excel 3 24.07.2009 09:58