Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция gets(), Функция не работает при 2м использовании 
:(
    Опции темы
yatojekim
Дата 14.5.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.5.2011

Репутация: нет
Всего: нет



При использовании функции gets в собственной функции. При 2ом вызове моей функции не происходит считывания. Менял местами вызов моей функции в main'е работает нормально только если между 1ым и 2ым использовании не происходил ввод данных с использованием cin >>. Также функция работает при 3ем вызове.
Код

struct students
{  char    name[25];
    int    age;            
    float    average;        
};
students fill_structs (students stu_data)
{  cout << " Введите имя студента: ";
    gets (stu_data.name);    // Функция gets вводит строку с клавиатуры
   return stu_data;}

students fill_structs1 (students stu_data)
{  cout << " Введите возраст студента: ";
    cin >> stu_data.age;    
return stu_data;}

int main()
{  students student1={0,0,0}, student2={0,0,0};
    student1 = fill_structs (student1);
  student1 = fill_structs1 (student1); 

   student2 = fill_structs (student2);// второй вызов моей функции
  student2 = fill_structs1 (student2);

   }

PM MAIL   Вверх
borisbn
Дата 14.5.2011, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



дело в том, что после ввода имени во входном буфере остаётся перевод строки, который потом попадает во второй gets. Чтобы этого избежать нужно перед вводом очищать входной буфер:
Код

students fill_structs (students stu_data)
{
  cout << " Введите имя студента: ";
  fflush( stdin );
  gets (stu_data.name);    // Функция gets вводит строку с клавиатуры
  return stu_data;
}

students fill_structs1 (students stu_data)
{
  cout << " Введите возраст студента: ";
  fflush( stdin );
  cin >> stu_data.age;    
  return stu_data;
}




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 15.5.2011, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



добавлю, что просто не нужно в одной функции смешивать "французское с нижегородским"
либо gets, либо cin>>


PM MAIL   Вверх
bsa
Дата 16.5.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



gets можно заменить на cin.getline().
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.