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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2012, 13:22   #1
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию перевод строки при вводе

ув. знатоки, помогите пож-та новичку

есть задача:
нужно заполнить структуру (неизвестное кол-во строк, которые по длине тоже не ограниченны, признак конца - eof, т.е. ctrl+z ), ввод с клавиатуры
вывести на экран с небольшой поправкой - после точки начинать со следующей строки

ввод сделал, вывод сделал, после точки тоже перескакивает

затык во в чём:
не могу придумать как сделать признак конца строки

т.е. у меня выводит структуру без перевода строк (если не считать точки)
как я понимаю: теряется конечный \n , как его можно вернуть в обработку ?

Код:
#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(); 
	while (!cin.getline(ch,n).eof())
		{	
			//cout<<"while1_"<<endl;
			cg=cin.gcount();
			for (int i1=0;i1<cg;i1++)
				{   if ((ch[i1]==*"(") || (ch[i1]==*")") || (ch[i1]==*"*") || (ch[i1]==*"/") || (ch[i1]==*"+") 
|| (ch[i1]==*"-") || (ch[i1]==*"1") || (ch[i1]==*"2") || (ch[i1]==*"3") || (ch[i1]==*"4") || (ch[i1]==*"5") 
|| (ch[i1]==*"6") || (ch[i1]==*"7") || (ch[i1]==*"8") || (ch[i1]==*"9") || (ch[i1]==*"0" || (ch[i1]==*",") 
|| (ch[i1]==*";") || (ch[i1]==*" ") || (ch[i1]==*"\t")))
						{
							//cout<<"for_"<<endl;
							vr->z=ch[i1];
							vr->s=new strv1;
							vr=vr->s;
							vr->s=NULL;
						}
				}
			
			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;
	}
}

void del_st(strv1 *stn)
{strv1 *tmp;
while (stn)
	{
		tmp = stn->s;
		delete(stn);
		stn = tmp;
	}

}

int _tmain(int argc, _TCHAR* argv[])
{	strv1 *stn;
	stn=new strv1;
	stn->s=NULL;

	cout<<"Vvedite stroku:"<<endl;
	input_st(stn);

	cout<<"Vvede'nnaya stroka:"<<endl;
	print_st(stn);

	del_st(stn);

	cout<<endl;
	return 0;
}

Последний раз редактировалось Stilet; 11.03.2012 в 15:09.
Chugun вне форума Ответить с цитированием
Старый 12.03.2012, 11:05   #2
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию

как понять, что после cin.getline(ch,n).eof() буфер ввода пуст ? какой флаг за это отвечает ?

идея такова: понять что буфер пуст и, если это так, пихнуть в структуру \n
Chugun вне форума Ответить с цитированием
Старый 12.03.2012, 15:38   #3
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию

разобрался
мб кому-то понадобится:
чтобы при таком варианте строки печатались так же, как и вводились надо
вместо vr->z=ch[i1]; вставить
if (ch[i1]==*"\0") {vr->z=*"\n";} else {vr->z=ch[i1];}

суть в том, что cin.getline() при нажатии Enter вконце ввода посылает в переменную значение \0, а в буфер cout значение \n
Chugun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пробелы при вводе KingWaR56 БД в Delphi 6 11.12.2011 09:58
Ошибка при вводе чисел FennecFox Общие вопросы C/C++ 0 25.01.2011 19:23
Не прекращается ввод при вводе пустой строки sunplant Общие вопросы C/C++ 10 10.06.2010 19:33
Ошибка при вводе даты tools SQL, базы данных 6 05.11.2009 21:12
TurboC - баг при вводе строки с клавиатуры FW-TOT Общие вопросы C/C++ 4 21.11.2008 01:39