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

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

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

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

Ответ
 
Опции темы
Старый 27.03.2010, 17:28   #1
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию Странное поведение gets

Здравствуйте.
Прошу Вас объяснить мне странное поведение этой функции.
Мне нужно выполнить задание по созданию структуры видеомагазин с возможностью добавления новых записей.
Первый фильм записывается без проблем, а вот начиная со второго добавления - почему-то первый раз gets не срабатывает...
Код и результат работы программы прилагаются:
Код:
#include<iostream>
#include<conio.h>
#include<string>
#include<stdio.h>
using namespace std;
struct video
{
	char film_name[40];
	char director_name[30];
	char genre[15];
	double rating;
	double cost;
};
void main()
{
//	Создать структуру ВИДЕОМАГАЗИН: 
	char key;
	int N=0;
	video *Tab=new video[N];
	video *tTab=new video[N];
	delete []tTab;
	cout<<"0 - exit\n";
	cout<<"1 - add film\n";
	while((key=_getche())!='0')
	{
		switch(key)
		{
			case '1':
			tTab=new video[N];
			for(int i=0;i<N;i++)
				tTab[i]=Tab[i];
			delete []Tab;
			Tab=new video[N+1];
			for(int i=0;i<N;i++)
				Tab[i]=tTab[i];
			delete []tTab;
			cout<<"\nInserting Film "<<(N+1)<<":\n";
			cout<<"Input film's name: ";
			gets_s(Tab[N].film_name);
			cout<<"Input director's name: ";
			gets_s(Tab[N].director_name);
			cout<<"Input genre: ";
			gets_s(Tab[N].genre);
			cout<<"Input rating: ";
			cin>>Tab[N].rating;
			cout<<"Input cost: ";
			cin>>Tab[N].cost;
			N++;
			cout<<"0 - exit\n";
			cout<<"1 - add film\n";
			break;
		}
	}
	cout<<"\nProgramm 'Video shop' closed\n\n";
}
Изображения
Тип файла: jpg Снимок.jpg (15.4 Кб, 157 просмотров)
alex_alpha вне форума Ответить с цитированием
Старый 27.03.2010, 17:47   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

ПОльзуйся cin.clear()
Или проверь, всели хорошо у потока, cin.good()
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 27.03.2010, 17:58   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Если пишите на C++, то вместо gets лучше использовать cin.getline
Код:
char s[80];
cin.getline(s, 80);
Проблема ваша связана не с проблемами у потоков, а из-за лишних символов в буфере, которые оставил cin. Напишите cin.ignore() после cin>>Tab[N].cost; Должно помочь. А вообще используйте поиск, очень популярная тема
netrino вне форума Ответить с цитированием
Старый 27.03.2010, 18:21   #4
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Спасибо за помощь.
alex_alpha вне форума Ответить с цитированием
Ответ

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

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение null Vitalyk JavaScript, Ajax 6 13.02.2010 15:22
Странное поведение процедуры Sergey1974 Общие вопросы Delphi 2 11.12.2009 21:41
Странное поведение TTreeView mutabor Компоненты Delphi 1 01.05.2009 04:17
Странное поведение базы yulia БД в Delphi 7 22.04.2009 06:15
Странное поведение ПОИСКПОЗ ZORRO2005 Microsoft Office Excel 5 19.05.2008 13:02


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS