Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2025, 00:13   #1
vovamakarovych
Пользователь
 
Регистрация: 09.04.2019
Сообщений: 50
По умолчанию std::cin не правильно работает

У меня есть две функции. И когда я перехожу к вводу с клавиатуры значений для второй функции, то вот почему пропускается и ждет завершения консоль . и я не понимаю что не так.
Грешу на :
Код:
for (int i = 0; i < size; ++i) 
{
    std::cin >> numbers[i];
}
Код:
nt main()
{  
   
    // Задание 1
    const int size = 1;
    std::cout << "Enter array elements: \n";
    int numbers[size] = {};
    for (int i = 0; i < size; ++i) 
    {
        std::cin >> numbers[i];
    }
    ................

    //Задание 2
    std::cout << "\n";
    std::cout << "Enter array string: ";

    char strUpp[127] = {};
    std::cin.getline(strUpp, 127);
    }
vovamakarovych вне форума Ответить с цитированием
Старый 15.01.2025, 00:18   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,821
По умолчанию

Сто раз же обмусоливалось везде. Не вычитываете перевод строки (т.е. enter после ввода цифр). Либо вычитывайте, либо игнор сделайте.
p51x вне форума Ответить с цитированием
Старый 15.01.2025, 00:28   #3
vovamakarovych
Пользователь
 
Регистрация: 09.04.2019
Сообщений: 50
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Сто раз же обмусоливалось везде. Не вычитываете перевод строки (т.е. enter после ввода цифр). Либо вычитывайте, либо игнор сделайте.
можно пример? не совсем понял....
vovamakarovych вне форума Ответить с цитированием
Старый 15.01.2025, 13:53   #4
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 186
По умолчанию

Код:
#include <iostream>
#include <cstring>

int main()
{

    const int size = 1;
    std::cout << "Enter array elements: \n";
    int numbers[size] = {};
    for (int i = 0; i < size; ++i) 
    {
        std::cin >> numbers[i];
    }
    
    //Задание 2
    std::cout << "\n";
    std::cout << "Enter array string: ";

    char strUpp[127] = { '\0' };
    std::cin.get();
    std::cin.getline(strUpp, 127);

    std::cout << std::strlen( strUpp );
    std::cout << std::endl;
    
    return 0;
}
Если в программе был вывод в std::cout, то в буфере ввода появляется лишний символ с кодом 10 (перевод строки), его надо "съесть" при помощи std::cin.get()
DeepFlake вне форума Ответить с цитированием
Старый 15.01.2025, 14:57   #5
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 186
По умолчанию

А зачем вы используете getline() ? Она ведь не применяется к объекту cin, getline() применяется к буферу для токенизации. Если вам надо просто считать строку с консоли, так это по-другому делается.
DeepFlake вне форума Ответить с цитированием
Старый 15.01.2025, 16:43   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,821
По умолчанию

Цитата:
Сообщение от vovamakarovych Посмотреть сообщение
можно пример? не совсем понял....
Код:
std::cin.get();
getline();
std::cin.ignore(1000, '\n');
Цитата:
Сообщение от DeepFlake Посмотреть сообщение
Если в программе был вывод в std::cout, то в буфере ввода появляется лишний символ с кодом 10 (перевод строки)
Нет. Он там появляется после того, как пользователь нажал enter после ввода цифр.

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
Она ведь не применяется к объекту cin, getline() применяется к буферу для токенизации.
Применяется

Цитата:
Сообщение от DeepFlake Посмотреть сообщение
Если вам надо просто считать строку с консоли, так это по-другому делается.
Можно итак
p51x вне форума Ответить с цитированием
Старый 15.01.2025, 19:17   #7
DeepFlake
Форумчанин
 
Регистрация: 16.05.2024
Сообщений: 186
По умолчанию

Вот так надо считывать строку с консоли:
Код:
std::string sb;
std::getline( std::cin, sb);
и никаких проблем с переводом строки
DeepFlake вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не правильно работает код Dm!User C++ Builder 16 11.03.2019 15:03
работает не правильно - C++ Александр121 Общие вопросы C/C++ 11 27.03.2018 02:13
Не правильно работает HaKeRR Общие вопросы C/C++ 1 02.01.2015 17:10
Не правильно работает код Sylar9 Общие вопросы C/C++ 8 05.04.2012 12:11
Не правильно (или правильно?) работает позиционирование в WebKit mutabor HTML и CSS 5 09.12.2010 09:54