Проблема со стандартным вводом-выводом СPP
В чем может быть проблема? Системная или все-таки с кодом? Вродебы ошибок в коде нет, но система не реагирует на нажатие "Enter" при вводе с помощью cin. Код написан в qt, система сборки qmake. Общий код - простейший:
#include <QCoreApplication>
#include <iostream>
#include <QDebug>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int matrix[100][100];
int rows;
int collumns;
cout << "Cuantos rows queres: ";
cin >> rows;
cout << rows;
return a.exec();
}
Ответы (1 шт):
Это не ответ на вопрос, но тем не менее я хочу объяснить, почему я дал такие советы в комментариях.
Что такое QCoreApplication? Это особый объект, который создаёт и запускает очередь событий - QEventLoop. Очередь событий нужна для обработки внутренних потребностей Qt, в том числе обслуживания механизма сигналов и слотов. Строка
return a.exec();
запускает очередь событий, и будет выполняться до тех пор, пока вы не вызовете a.quit(). То есть ваша программа не завершится никогда (нажатие крестика закрытия консоли - это аварийное завершение, фактически - убийство процесса).
Если ваша программа представляет собой линейный однопоточный алгоритм, то QEventLoop и, соответственно, QCoreApplication вам не нужны. В конце функции main можно написать return 0;.
Теперь про оператор вывода. При помещении данных в поток вывода cout эти данные буферизуются, и могут фактически появиться в устройстве вывода (консоли) не тогда, когда вы вызвали оператор <<. Буфер может сбрасываться при вызове метода cout.flush(), при помещении в поток объекта std::endl, при вызове деструктора потока (например, при завершении работы программы). При убийстве процесса буфер не сбрасывается. Поскольку ваша программа никогда не завершается, то и сброса буфера нет, следовательно, введённые данные не попадут обратно в вывод.
Теперь вы утверждаете, что вызов оператора >> для потока cin не завершается, и вы определили это по тому признаку, что после нажатия клавиши enter программа продолжает читать поток. Я думаю, это поведение какого-то нестандартного терминала, и советую вам попробовать запустить программу в чистой среде. Например, без использования среды разработки. Или в другой операционной системе. Если там будет всё хорошо, то искать проблему в вашем терминале.