Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 08.06.2008, 15:36   #1
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию оформить как функцию

в программе есть ввод с клавиатуры, в структуру
Код:
while(1)
			{
				w=getch();
				if (w>='a' && w<='z')
					{
						printf("%c",w);
						anketa.name[k]=w;
						k++;
						if(k==CH)
						break;
					}
				else if (w=='\r')
				break;
			}
		k=0;
		printf("\nenter your lastname	");
		while(1)
			{
				w=getch();
				if (w>='a' && w<='z')
					{							printf("%c",w);
						anketa.famil[k]=w;
						k++;
						if(k==CH)
						break;
					}
				else if (w=='\r')
				break;
			}
		printf("\nyou man or woman? (enter 'm' or 'w')  ");
		while(1)
			{
				w=getch();
				if (w=='m' || w=='w')
					{
						printf("%c",w);
						anketa.pol=w;
						break;
					}
				else if (w=='\r')
				break;
			}
		k=0;
		printf("\nyear	");
		while(1)
			{
				w=getch();
				if (w>='0' && w<='9')
					{
						printf("%c",w);
						anketa.old=w-'0';
						k++;
						if(k==3)
						break;
					}
				else if (w=='\r')
				break;
			}
		k=0;
		printf("\nyour favorite song1	");
		while(1)
			{
				w=getch();
				if (w>='0' && w<='9')
					{
						printf("%c",w);
						anketa.song1=w-'0';
						k++;
						if(k==CH)
                                                break;
					}
				else if (w=='\r')
				break;
			}
		k=0;
		printf("\nyour favorite song2	");
		while(1)
			{
				w=getch();
				if (w>='0' && w<='9')
					{
						printf("%c",w);
						anketa.song2=w-'0';
						k++;
						if(k==CH)
						break;
					}
				else if (w=='\r')
				break;
			}
		k=0;
		printf("\nyour favorite song3	");
		while(1)
			{
				w=getch();
				if (w>='0' && w<='9')
					{
						printf("%c",w);
						anketa.song3=w-'0';
						k++;
						if(k==CH)
						break;
					}
				else if (w=='\r')
				break;
			}
получилось ужасно))) помогите пожалста оформить вот эти внутренние маленькие циклы в функцию...
arturka вне форума Ответить с цитированием
Старый 08.06.2008, 16:41   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от arturka Посмотреть сообщение
......помогите пожалста оформить вот эти внутренние маленькие циклы в функцию...
А смысл программы в том, чтобы показать именно эти циклы? С поставленной задачей прекрасно справляются, например, scanf или gets/fgets.
B_N вне форума Ответить с цитированием
Старый 08.06.2008, 18:55   #3
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию

да, к сожаления надо через getch...
arturka вне форума Ответить с цитированием
Старый 08.06.2008, 20:34   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Ну значит сделайте функцию вроде
Код:
int getstring(char min, char max, long maxlen, char* pstr)
{
	long i = 0;

	while(i < maxlen)  
	{ 
		char w = (char)getch(); 
		if (w >= min && w <= max) 
		{
			putch(w); 
			*pstr ++ = w; 
			i ++; 
		}  
		else if (w=='\r') break;  
	}
	return i;
}
и вместо
Код:
while(1)
			{
				w=getch();
				if (w>='a' && w<='z')
					{
						printf("%c",w);
						anketa.name[k]=w;
						k++;
						if(k==CH)
						break;
					}
				else if (w=='\r')
				break;
			}
вот так:
Код:
getstring('a', 'z', <<<MAX_anketa.name_LENGTH>>>, anketa.name);
и т.д.
B_N вне форума Ответить с цитированием
Старый 17.06.2008, 12:32   #5
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию

еще подскажите плиз, в функции scanf по-моему можно ограничивать количество символов для ввода, вроде вот так
scanf("%15s%", ch);
но почему то не работает.. запись не верная? или что то еще?
arturka вне форума Ответить с цитированием
Старый 17.06.2008, 13:28   #6
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Функция scanf выполняет форматированный ввод данных из входного потока. Т.е. с клавиатуры вы можете вводить сколько угодно знаков, но считано будет только первые 15 (в вашем случае) либо до знака разделителя.

И еще, последний знак % не нужен.
Игорь007 вне форума Ответить с цитированием
Старый 20.06.2008, 01:25   #7
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию

спасиб большое завтра(т.е. уже седня) скорее всего еще появятся вопросы... ох уж эта курсовая...
arturka вне форума Ответить с цитированием
Старый 20.06.2008, 20:46   #8
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию

есть массив структур,
struct {
char name[];
int nomer;
int golos;
int mesto;
} pesni[5];
в ходе работы программы переменная golos меняется. как отсортировать по порядку (по убыванию) эти структуры? чтобы результат этой сортировки(т.е. вот этот порядок по перемен. golos) записался в перем. mesto.
я пробывал следущее
Код:
      for(ar=0;ar<5; ar++)
       for(k=0;k<5-1;k++)
	{
	 if (pesni[k].golos<pesni[k+1].golos)
	   {
	    max=pesni[k+1].mesto;
	    pesni[k+1].mesto=pesni[k].mesto;
	    pesni[k].mesto=max;
	   }
	}
   //   printf("\n mesto %c   %c",pesni[0].mesto,pesni[2].mesto);
   //   fprintf(fp,"\n\n%c   %d",pesni[0].mesto,pesni[0].golos);
    //  fprintf(fp,"\n%c   %d\n\n",pesni[2].mesto,pesni[2].golos); проверка
 }
отсортировать методом пузырька, но т.к сравниваю я по golos, а менять мне надо mesto, то ниче не получилось ай нид хелп...

Последний раз редактировалось arturka; 20.06.2008 в 21:06.
arturka вне форума Ответить с цитированием
Старый 20.06.2008, 21:28   #9
Игорь007
Пользователь Подтвердите свой е-майл
 
Аватар для Игорь007
 
Регистрация: 30.05.2008
Сообщений: 96
По умолчанию

Во-первых модераторы я думаю сделают вам замечание, т.к. одна тема один вопрос. Так что лучше нужно было создать новую тему.
Во-вторых
Код:
char name[];
нужно указывать размер строки.
Ну и в трейтих не совсем понятно по каким критериям сортировать (я понял по golos) и что значит записать результат сортировки в переменную mesto.
Игорь007 вне форума Ответить с цитированием
Старый 20.06.2008, 21:57   #10
arturka
 
Регистрация: 08.06.2008
Сообщений: 9
По умолчанию

ну вот в структуре 2 перем.: golos и mesto. изначально в mesto записаны номера структур (т.к. это массив структур)
потом golos меняется, например:
pesni[0].golos=2; - pesni[0].mesto=1;
pesni[1].golos=1; - pesni[1].mesto=2;
pesni[2].golos=3; - pesni[2].mesto=3

а места (mesto) должны назначится в соответствии с этим, т.е.
pesni[0].golos=2; - pesni[0].mesto=2;
pesni[1].golos=1; - pesni[1].mesto=3;
pesni[2].golos=3; - pesni[2].mesto=1;

ну вот что-то типа того...
arturka вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
написать кэш-функцию andrey4623 Общие вопросы Delphi 6 01.04.2011 10:59
Оформить задачу процедурами Anita_i Паскаль, Turbo Pascal, PascalABC.NET 2 12.05.2008 11:37
Подскажите функцию juden Microsoft Office Excel 1 06.12.2007 18:28
Перевод строки в функцию кетчуп Помощь студентам 6 23.11.2007 17:04
Как создать процедуру и функцию? Absent Общие вопросы Delphi 1 18.11.2007 17:36


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840