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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.12.2009, 21:08   #1
sawer5
Пользователь
 
Аватар для sawer5
 
Регистрация: 07.11.2009
Сообщений: 26
Лампочка Подскажите как работает eof()[Console C++]

Доброго дня(или вечера).
Начну с того что написал програмку для
подсчёта количества пробелов в строке.
Вот её код:
#include <iostream>
#include <locale.h>
using namespace std;

Код:
int main()
{
	setlocale(LC_ALL,"Rus");
	char f[10];
	char space = ' ';
	int temp = 0;
	int red = 0;
	cout << "Введите вашу строку:";
	while(cin.eof() == 0 && temp < 10)
	{
		cin >> f[temp];
		if(f[temp] == space)
		{
			red++;
		}
		temp ++;
	}
	cout << "Количесто пробелов = " << red;
for(int i=0;i< temp;i++) { cout << f[i] << endl; }
return 0; }
Программа действительно может считать пробелы...

Только есть два изьяна о которых щас пойдёт речь.
1)Программа не прекращает считывать данные(почему_то) при переходе на новую строку.
2)Следствием из 1-го недостатка вытекает то что появилась огранниченность на число вводимых символов с клавиатуры.
Уважаемые программисты.Разтолкуйте мне смысл функции eof().
#include <sawer5>
sawer5 вне форума Ответить с цитированием
Старый 01.01.2010, 03:41   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от sawer5
Программа действительно может считать пробелы...
Лично я от нее не смог такого добиться )
Эта единичка справа от нуля - часть выводимой строки. А количество пробелов, которое нашла программа - 0.
Функция eof возвращает истину, если установлен флаг eofbit (например, пользователь ввел Ctrl + Z).
Цитата:
1)Программа не прекращает считывать данные(почему_то) при переходе на новую строку.
Если нужно так, то сравнивайте символ с символом перевода строки - '\n'.

Немного по-другому сделал:
Код:
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
	setlocale(LC_ALL,"Rus");
	char f[10];
	char space = ' ';
	int temp = 0;
	int red = 0;
	cout << "Введите вашу строку:";
	do
	{
		f[temp] = cin.get();
		if(f[temp] == space)
			red++;
	} while(f[temp]!='\n' && temp++ < 10);
	
	cout << "Количество пробелов = " << red <<endl;
	for(int i=0;i< temp;i++)
	{
		cout << f[i];
	}
	getch();
	return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.01.2010, 05:18   #3
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

На С++
Код:
#include <algorithm>
#include <iostream>
#include <locale>
#include <string>

int main()
{
	std::locale::global(std::locale("Russian"));

	std::string str;

	std::cout << "Введите строку..\n";
	std::getline(std::cin, str);

	std::cout << "\nВстроке \"" << str << "\" Пробелов: " 
			  << std::count(str.begin(), str.end(), ' ')
			  << std::endl;
	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 01.01.2010, 12:11   #4
sawer5
Пользователь
 
Аватар для sawer5
 
Регистрация: 07.11.2009
Сообщений: 26
По умолчанию

Программу переписал.
Код:
#include <iostream>
#include <locale.h>
using namespace std;
#define eof -1
int main()
{
	setlocale(LC_ALL,"Rus");
	char f;
	char space = ' ';
	int red = 0;
	cout << "Введите вашу строку[Exit:Ctrl+Z]:";
	while(( f = getchar() ) != eof)
	{
		f = getchar();
		if(f == space)
		{
			red++;
		}
	}
	cout << "Количесто пробелов = " << red;
	cin.get();
	return 0;
}
Вот такие результаты:

Спасибо, ISergeyN и Sazary.Позновато зашол я.Я нашол простое решение...
Тему можно удалить.
#include <sawer5>

Последний раз редактировалось sawer5; 01.01.2010 в 12:18.
sawer5 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите почему программа не работает ZarakiKenpachi Общие вопросы C/C++ 5 05.11.2009 23:34
функция eof! срочно! kitty_girl Помощь студентам 6 21.05.2009 22:25
как визывать Tform1 из Console andreibtzt Общие вопросы Delphi 2 28.04.2009 16:01
задача работает неправильно, подскажите! IvanIvan Помощь студентам 1 26.05.2008 22:21
Подскажите почему не работает программа??? Danilyuk Помощь студентам 2 25.01.2008 10:15