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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
#1

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

15.11.2013, 16:47. Просмотров 547. Ответов 2
Метки нет (Все метки)

Возникли проблемы с функцией 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 не вызывается во второй раз
Посмотрите здесь:

Функция не вызывается 2й раз - C++
Смысл - функция служит для записи числа в массив (посимвольно) int* read(int mass) { int i=0; while(cin&gt;&gt;mass) { i++;...

Второй раз функция отрабатывает неверно [С++] - C++
Добрый день. Есть функция char * fun(char *str);, которая выполняет несколько действий над этой строкой. Если вызывать функцию один раз, то...

cin.getline работает через раз - C++
вот этот код работает прекрасно #include &lt;iostream&gt; using namespace std; void Open_Directory() { char *directory= new char; ...

Функция getline - C++
Делаю упражнение по С++ (консольное приложение). Необходимо считать строку, включая пробелы. Вот описание класса: class employee { ...

Функция getline - C++
Добрый вечер. Очень долго пытался найти в чём проблема в работе программы-она выдавала немного не то значение,которые было необходимо.Ни...

Функция С++ getline() - C++
Здравствуйте! Скажите пожалуйста, каков смысл функции cin.getline(). Если не сложно,приведите пожалуйста пример.

Сколько раз вызывается конструктор копирования - C++
Почему n не увеличивается? Point(const Point&amp; src){ n++; set(src.x+1, src.y+1); cout &lt;&lt; &quot;Konstruction copyrovanija...

Не работает функция getline ! - C++
Здравствуйте, помогите, если можете. Не корректно работает функция getline ! Я облазил google, нашел много похожих постов, но...

Функция cin.getline() - C++
Имеется часть кода: void EditName(Account &amp;acc) { delete acc.name; char nam; cout&lt;&lt;&quot;Введите новое имя: &quot;; ...

Не выполняется функция getline() - C++
Добрый вечер, уважаемые программисты! Написал программу, содержащую класс, который имеет два поля: номер и имя, и два метода: ввод и...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 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
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
15.11.2013, 17:29  [ТС]     Функция sin.getline не вызывается во второй раз #3
Да, я перепробовала много чего, а такой простой вариант на ум не пришел))))
Спасибо))) Теперь все работает))))
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru