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

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

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

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

Ответ
 
Опции темы
Старый 27.03.2010, 18: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
Просмотров: 137
Размер:	15.4 Кб
ID:	23183  
alex_alpha вне форума   Ответить с цитированием
Старый 27.03.2010, 18:47   #2
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

ПОльзуйся cin.clear()
Или проверь, всели хорошо у потока, cin.good()
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума   Ответить с цитированием
Старый 27.03.2010, 18: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, 19:21   #4
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


00:18.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.