Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 23

Работа функции cin.get(): не дожидается ввода символа в конце программы

06.01.2017, 03:08. Показов 2292. Ответов 2

Студворк — интернет-сервис помощи студентам
Доброго времени суток, столкнулся с таким странным поведением cin.get(), после окончания ввода списка (ответ n) вместо того, что бы в конце выполнения ждать ввода символа, программа завершает работу. В других программах эта функция работает нормально, заголовочные файлы те же, system("pause") тоже работает в том же месте нормально. Кто то знает в чём проблема? (Привёл полный листинг на всякий случай) MVStudio 2015
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include <iostream>
#include <string>
 
 
class person // некоторый человек
{
protected:
    std::string name; // имя
    float salary;
public:
    void setData() // установка имени
    {
        std::cout << "Write a name: "; std::cin >> name;
        std::cout << "Write value of salary: "; std::cin >> salary;
    }
    void printData() // показ имени
    {
        std::cout << std::endl << name << std::endl << salary;
    }
    std::string getName() // получение имени
    {
        return name;
    }
    float getSalary()
    {
        return salary;
    }
};
 
void salsort(person** pp, int n)
{
    int j, k;
    for (j = 0; j < n - 1; j++)
    {
        for (k = j + 1; k < n; k++)
        {
            if ((*(pp + j))->getSalary() >(*(pp + k))->getSalary())
            { 
                person* temp = *(pp + j);
                *(pp + j) = *(pp + k);
                *(pp + k) = temp;
            }
        }
    }
}
 
int main()
{
    person* persPtr[100]; // массив указателей на person
    int n = 0; // количество элементов в массиве
    char choice; // переменная для ввода символа
    do
    {
        persPtr[n] = new person; // создаем новый объект
        persPtr[n]->setData(); // вводим имя
        n++; // увеличиваем количество
        std::cout << "Continue (y/n)?"; // спрашиваем, закончен ли ввод
        std::cin >> choice;
    } while (choice == 'y');
    std::cout << "\nUnsorted list:";
    for (int j = 0; j < n; j++) // покажем неотсортированный список
        persPtr[j]->printData();
    salsort(persPtr, n);
    std::cout << "\nSorted list:";
    for (int j = 0; j < n; j++) // покажем отсортированный список
        persPtr[j]->printData();
    std::cout << std::endl;
    std::cin.get();
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2017, 03:08
Ответы с готовыми решениями:

Работа с cin при считывании с потока ввода
есть кусочек кода while (1) { string buf = name; cout &lt;&lt; &quot;Message : &quot;; string symbolBuf = &quot;&quot;; while (cin &gt;&gt;...

Не дожидается ввода строки
На определенном месте программа не дожидается ввода строки getline(std::cin, newstring); а заканчивает работу. В чем может быть причина. ...

Программа не дожидается окончания ввода
Код: #include &lt;iostream&gt; #include &quot;treep.h&quot; #include &quot;binary_search_tree.h&quot; using namespace std; int main() { int...

2
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
06.01.2017, 03:34
Цитата Сообщение от Monkeber Посмотреть сообщение
Кто то знает в чём проблема?
После std::cin >> choice вы вводите 'n' и жмете enter. 'n' прочиталось, enter ('\n') осталось в буфере обмена. А пока в буфере чего-то болтается, методы cin запрашивать ввод не будут. Просто вернут вам то что в буфере лежит.
1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.01.2017, 00:19
Monkeber, добавь cin.ignore() перед cin.get().
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2017, 00:19
Помогаю со студенческими работами здесь

Повтор программы после ввода символа
На форуме уже данная тема была, но не один из примеров приведенных в ней не работает... Как реализовать повтор программы, с помощью char...

Работа с потоками cin и cout из другой программы
Допустим, есть программа, принимающая два числа (в cin потоке), и выводящая их произведение (в cout поток). int main() { int x, y; ...

Код не дожидается своей функции. Необходимо строго остановить работу кода до появления функции
Собственно пару слов о коде. Организован бесконечный цикл ожидания приёма 1 с клиента серверу и посылка данных от сервера клиенту при...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые мне не понятны, и прошу объяснить, как...

Отличие функции cin.get и cin.getline
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get считывает символ разрыва строк и оставляет...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru