Форум программистов, компьютерный форум CyberForum.ru

Функция sin.getline не вызывается во второй раз - C++

Восстановить пароль Регистрация
 
ElenaBilyk
 Аватар для ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
15.11.2013, 16:47     Функция sin.getline не вызывается во второй раз #1
Возникли проблемы с функцией sin.getline(). Имеется заголовочный файл:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef GOLF
#define GOLF
  const int Len = 40;
  struct golf 
  {
    char fullname[Len];
    int handicap;
  };
  void setgolf (golf & g, const char * name, int hc);
  int setgolf (golf & g);
  void handicap (golf & g, int hc);
  void showgolf (const golf & g);
  #endif
К нему есть файл .cpp в котором определены функции
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "stdafx.h"
#include <iostream>
#include "golf.h"
 void setgolf (golf & g, const char * name, int hc)
 {
    memcpy(g.fullname, name, sizeof(char) * strlen(name));
    g.fullname[strlen(name)] = '\0';
    g.handicap = hc;
 }
 int setgolf (golf & g)
 {
    std::cout<<"Funk setgolf() \n";
    std::cout<<"Enter the fullname: ";  
    std::cin.getline(g.fullname, Len);
    
    if (strlen(g.fullname) == 0)
        return 0;   
    std::cout<<"Enter the handicup: ";
    while (!(std::cin>>g.handicap))
    {
        std::cout<<"Cycle cin>>g.handicup";
        std::cout<<"Bad input. Enter the number: ";
        std::cin.clear();
        while(std::cin.get() == '\n')
            continue;
    }   
 
    return 1;   
 }
 void handicap (golf & g, int hc)
 {
    g.handicap += 10;
 }
 void showgolf (const golf & g)
 {
    std::cout<<"The player "<<g.fullname<<" has "<<g.handicap<<" handicap.\n";
 }
И, наконец в main следующее

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdafx.h"
#include "golf.h"
#include <iostream>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
              int Res = 1;
    const int pl = 10;
    golf com[pl];
    int count = 0;
    for(int i = 0; i < pl; ++i)
    {
        std::cout<<"i = "<<i<<'\n';
        Res = setgolf(com[i]);
        std::cout<<"Res = "<<Res<<'\n';
        if (Res == 0)
            break;
        count++;
        std::cout<<"count = "<<count<<'\n';
    }   
    for(int i = 0; i < count; i++)
        showgolf(com[i]);
 
 
    
 
    return 0;
}
В целом прога работает, но когда в цикле вызывается функция, которая запрашивает у пользователя имя игрока и его фору, первую итерацию цикл проходит нормально, а при последующих cin.getline не вызывается, при этом она возвращает 0 и программа завершается.


Что-то я не пойму, почему она не вызывается? Подскажите, а?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2013, 16:47     Функция sin.getline не вызывается во второй раз
Посмотрите здесь:

Функция С++ getline() C++
Сколько раз вызывается конструктор копирования C++
C++ cin.getline работает через раз
C++ Второй раз функция отрабатывает неверно [С++]
C++ Функция getline в условии while
C++ Функция не вызывается 2й раз
Функция getline C++
Не выполняется функция getline() C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
15.11.2013, 17:21     Функция sin.getline не вызывается во второй раз #2
Цитата Сообщение от ElenaBilyk Посмотреть сообщение
C++
1
2
while(std::cin.get() == '\n')
   continue;
Для начала попробуйте так
C++
1
cin.sync();
ElenaBilyk
 Аватар для ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
15.11.2013, 17:29  [ТС]     Функция sin.getline не вызывается во второй раз #3
Да, я перепробовала много чего, а такой простой вариант на ум не пришел))))
Спасибо))) Теперь все работает))))
Yandex
Объявления
15.11.2013, 17:29     Функция sin.getline не вызывается во второй раз
Ответ Создать тему
Опции темы

Текущее время: 01:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru