Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Michail97
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 384

Cin перестал читать из потока ввода

15.02.2018, 13:40. Показов 2541. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла проблема при чтении из потока.
Может кто знает, как решить эту проблему с cin?
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <Windows.h>
#include <iomanip>
#include <vector>
#include <algorithm>
 
#define SIZE 20
using namespace std;
 
 
struct ORDER {
 
    char lpszNumber_1[ SIZE + 1];
    char lpszNumber_2[SIZE + 1];
    float fSum;
 
};
 
bool comp(ORDER arg_1,   ORDER arg_2)
{
 
    return  ( strcmp( arg_2.lpszNumber_1, 
            
        arg_1.lpszNumber_1) > 0 ) ;
}
 
 
 
vector<ORDER> Input( void  ) 
{
 
    vector<ORDER>mass;
    while (1)
    {
 
        char buff[50];
        cin.get(buff, sizeof(buff) - 1);
        cin.get();
        if (strcmp(buff, "") == 0)
        {
            break;
        }
        
        ORDER temp;
        if (3 != sscanf(buff, "%s %s %f", temp.lpszNumber_1, temp.lpszNumber_2, &temp.fSum))
        {
            cout << "Неверный ввод!\n";
            continue;
        }
        
        mass.push_back(temp);
        
        //qsort( &mass[0], mass.size(), sizeof(ORDER), comp);
        sort( mass.begin(), mass.end(), comp);
 
    }
    return mass;
}
 
void GetInfo( vector<ORDER>mass, char string[] )
{
    bool flag = false;
    while (mass.size() > 0)
    {
        ORDER temp = mass[  mass.size() - 1];
        if (strcmp(temp.lpszNumber_1, string) == 0)
        {
            cout << "Сумма, снятая этим плательщиком: " << temp.fSum<<endl;
        }
        mass.pop_back();
 
    }
    if (!flag)
    {
        cout << "Таких расчётных счетов нет!\n";
    }
}
 
 
int main( void )
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
 
    int count;
    cout << "Вводите даееые.\n«Номер плательщика Номер получателя Сумма»\nВвод пустой строки - конец ввода.\n";
 
    vector<ORDER>mass(Input());
 
    for (int i = 0; i < mass.size() ; i++)
    {
        cout <<left<< setw( 20 )<<mass[i].lpszNumber_1 << " " << setw(20)<<mass[i].lpszNumber_2 <<" "<<right<< mass[i].fSum <<" рублей"<< endl;
    }
    cout << "Введите расчётный счёт плательщика: ";
 
 /*--------- здесь уже не читает-------------*/
    
    char buff[21];
 
    cin.get(buff, sizeof(buff) - 1, '\n');
 
    GetInfo(mass, buff);
    
    system("pause");
    return 0;
}
Добавлено через 31 минуту
Вообще непонятно.
C++
1
2
3
4
5
6
7
 char buff[50];
        cin.get(buff, sizeof(buff) - 1);
        cin.get();
        if (strcmp(buff, "") == 0)
        {
            break;
        }
Здесь я считыва символы в массив( при этом в потоке остаётся символ перевода строки )
Его я извлекаю. Дальше в цикле всё нормально выполняется и записывается, а вот после ввода пустой строки и выхода из цикла уже cin никак не хочет читать ничего. Даже интересно что в потоке сидит.
Ну не eof точно

Добавлено через 1 час 19 минут
Короче, да EOF. При этом при вводе пустой строки
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2018, 13:40
Ответы с готовыми решениями:

Обработка ошибок ввода из потока cin
Доброго времени суток всем! Помогите пожалуйста разобраться. После ввода буквы например, то есть когда поток ломается, пытаюсь его...

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

Использование потока cin для ввода символов
Вот первая функция, cin.get(ch) которую я не понимаю int main() { char ch; cin.get(ch); while (ch != '\n') { cout...

4
 Аватар для igorrr37
2889 / 2036 / 992
Регистрация: 21.12.2010
Сообщений: 3,787
Записей в блоге: 9
15.02.2018, 13:43
C++
1
2
3
cin.get(buff, sizeof(buff));
cin.clear();
cin.get();
0
 Аватар для Michail97
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 384
15.02.2018, 14:10  [ТС]
igorrr37, все равно потом поток читать не хочет

Добавлено через 2 минуты
igorrr37, я из потоку беру строку, до символа перевода строки. Сам символ вытаскиваю get без параметров, но в случае если я ничего не вввожу( пустая строка ) то дальше у меня в потоке сидит eof и всё. Капут

Добавлено через 6 минут
igorrr37, в общем, как мне завершить ввод строк, при этом чтоб в потоке не сидел eof, используя только методы cin. Можете подсказать?

Добавлено через 7 минут
Бред какой-то, мне eof можно как-нибудь сбросить потом? Или ничего не сделаешь?
0
 Аватар для igorrr37
2889 / 2036 / 992
Регистрация: 21.12.2010
Сообщений: 3,787
Записей в блоге: 9
15.02.2018, 14:19
Лучший ответ Сообщение было отмечено Michail97 как решение

Решение

когда вводишь пустую строку то cin.get(buff, sizeof(buff)); ничего не читает оставляя в потоке символ перевода строки и выставляя флаг failbit. Поэтому сперва надо сбросить флаг через cin.clear(), потом считать перевод строки, а уж потом можно читать свежие данные
0
 Аватар для Michail97
94 / 41 / 23
Регистрация: 18.09.2016
Сообщений: 384
15.02.2018, 18:27  [ТС]
igorrr37, вы мой спаситель. А то в си вообще было просто с потоками ввода, а тут ещё и флаги для него надо менять в случае обычного ввода пустой строки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2018, 18:27
Помогаю со студенческими работами здесь

читать пробел cin ом
Возможно, глупый вопрос, но как считать cinом строчку с пробелом? Желательно в массив char

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

Возобновление потока cin.
Всем привет =) С недавних пор изучаю С++, и вот однажды, во время выполнения одного из заданий из учебника Страуструпа, наткнулся я на...

Проблемы со сбросом потока cin.clear()
Всем привет. Столкнулся с такой проблемой и до сих пор не смог ее решить. Имеется следующая задача. Через консоль подаются некоторые...

Поместить данные в буфер потока cin
Здравствуйте. Поправьте, если ошибаюсь в терминах. Нужно эмулировать ввод слова в объект istream, а именно cin с клавиатуры, иначе говоря...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru