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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2012, 16:04   #1
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию C++, ввод списка средствами cin.getline

дали мне на днях задачку:
из входного потока вводится произвольное число строк.
Длинна строки не ограничена.
Каждая строка представляет собой последовательность слов,
разделённых одним или несколькими пробелами и/или знаками табуляции, запятой, точкой с запятой или точкой.
Строка представлена списком (первое поле элемента списка - символ строки, второе - указатель на следующий элемент списка
или NULL в конце списка).
Конец ввода определяется концом файла.

примечания:
1. ввод строк неопределённой длинны должен быть организован с помощью метода
cin.getline(куда, максимум_сколько). Метод cin>>куда не использовать!
2. структура программы должна быть следующей: пока не обнаружен конец файла
{ввести строку cin.getline(куда, максимум_сколько)}; сформировать список;
обработать список в соответствии с условием задачи; вывести результат;
освободить память, выделенную под список.

и вот я столкнулся с проблемой:
как ввести одну строку - понятно, выполнено и работает.
как ввести конец цикла !? т.е. тот самый "конец файла"... порывшись по и-нету понял что этот код входной поток получает при сочетании клавиш CTRL+Z
попробовал реализовать - не получилось...
возможно есть другие способы ? есть ли у ESC свой код и/или обозначение в си++ ?

помогите разобраться пож-та
пробовал вместо "return" ставить fe=-1, результат не изменился

Код:
#include "stdafx.h"
#include "iostream"
#include "iomanip"

using namespace std;

struct strv1
{
char z;
strv1 *s;
};

void input_st(strv1 *stn)
{   cout<<"input_st_"<<endl;
	const int n=10;
	strv1 *vr;
	int cg,fe=0;
	char ch[n];
	for (int i=0;i<n;i++)  
		{
			ch[i]=' ';
		}
	vr=stn;
	cin.clear(); cin.ignore();
	while (fe>=0)
		{
			cin.getline(ch,n);
			cout<<"while_"<<endl;
			cg=cin.gcount();
			for (int i1=0;i1<cg-1;i1++)
				{   cout<<"for_"<<endl;
					vr->z=ch[i1];
					vr->s=new strv1;
					vr=vr->s;
					vr->s=NULL;
					if (ch[i1+1]==EOF)
						{
							return;
						}
					if ((ch[i1]=='t') && (fe==0))
					{	fe=1;} else {
							if ((ch[i1]=='u') && (fe==1))
							{	fe=2;} else {
									if ((ch[i1]=='p') && (fe==2))
									{	fe=3;} else {
											if ((ch[i1]=='i') && (fe==3))
											{	fe=4;} else {
													if ((ch[i1]=='k') && (fe==4))
													{	fe=-1;} else {fe=0;}
											}}}}
				}
			cin.clear();

		}



}

void print_st(strv1 *stn)
{ strv1 *vr;
	vr=stn;
	while(vr->s!=NULL)
	{
	cout<<vr->z;
	//if (vr->z='.') {cout<<endl;}
	vr=vr->s;
	}
}


int _tmain(int argc, _TCHAR* argv[])
{	strv1 *st, *stn;
	stn=new strv1;
	stn->s=NULL;
	cout<<"Vvedite stroku:"<<endl;
	input_st(stn);
	cout<<"Vvede'nnaya stroka:"<<endl;
	print_st(stn);

	st=stn;
	while(st->s!=NULL)
	{
		stn=st->s;
		delete st;
		st=stn;
	}
	cout<<endl;
	return 0;
}
Chugun вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ввод string, getline Alex11223 Помощь студентам 3 17.04.2011 16:08
C++ cin.getline. Исправьте ошибку Jane-sad Помощь студентам 0 18.02.2011 15:46
нужно визуальными средствами делфи сделать заполнение списка, добавление и удаление звена ksenechka5 Помощь студентам 0 04.01.2011 19:01
getline(wcin, str) - лишний ввод Кипящий чайник Visual C++ 26 24.09.2010 00:51
Проблема с функцией cin.getline. Подскажите советом. (*_*) Общие вопросы C/C++ 3 04.03.2009 22:43