Как напечатать текст с помощью cout после нажатия ввода?

Какая команда позволяет мне вычислить мои новые случайные числа, нажав клавишу ввода? Я пытался написать system("pause"), но затем появляется строка "нажмите любую клавишу, чтобы продолжить", что мне не нравится. Есть ли возможность просто нажать кнопку ввода и увидеть числа один за другим?

Вот код программы:

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <ctime>

int main()
{
    int i, k;

    srand(time(0));
    for (i = 0; i < 20; i++)
    {
        cout << (rand() % 8) << endl;
    }
}

person Edvinas Perminas    schedule 18.12.2011    source источник
comment
Попробуйте cin.readline() или, если вы можете обойтись без прослушивания ввода, тогда cin.readchar().   -  person M.Babcock    schedule 18.12.2011
comment
нет :) Действительно, я не могу понять, как это сделать..   -  person Edvinas Perminas    schedule 18.12.2011
comment
@ M.Babcock: вас не смущает объект Console .NET Framework?   -  person Matteo Italia    schedule 18.12.2011
comment
Зачем тебе это вообще? Что за глупая программа будет поглощать произвольное количество входных данных в ходе своей обычной работы? Это было бы совершенно бесполезно в любой цепочке композиции... просто сосредоточьтесь на том, чтобы написать что-то действительно полезное.   -  person Kerrek SB    schedule 18.12.2011
comment
@MatteoItalia: ты прав. Я обновил его.   -  person M.Babcock    schedule 18.12.2011
comment
это не сработает, потому что, когда я набираю cin.readline(), выдается ошибка - класс cin не имеет члена readline..   -  person Edvinas Perminas    schedule 18.12.2011


Ответы (6)


#include <limits>

// ...

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

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

person Matteo Italia    schedule 18.12.2011

Вот немного более современный взгляд на С++:

#include <iostream>
#include <ctime>
#include <random>

int main()
{
    std::mt19937 rng(std::time(0));
    std::uniform_int_distribution<int> gen(0,7);

    for (int i=0;i<20;i++)
    {
        std::cout << gen(rng);

        std::string line;
        std::getline(std::cin, line);
    };
}
person sehe    schedule 18.12.2011
comment
@KerrekSB g++ все еще ест его, как младенец, поэтому я постоянно забываю, не замечая. - person sehe; 18.12.2011

Вы можете просто использовать getchar(), который будет читать одно нажатие клавиши, а затем продолжит. Если вы хотите специально сломать клавишу ввода, используйте что-то вроде while (getchar() != "\n");

person Tom van der Woerdt    schedule 18.12.2011
comment
Не используйте гетч. Это нестандартно. Используйте гетчар. - person Lalaland; 18.12.2011
comment
getch является расширением Borland C (и, возможно, MSVC) для стандартного C через библиотеку conio. это не часть стандарта и, конечно же, недоступно (по умолчанию) в большинстве компиляторов (включая gcc) - person LeleDumbo; 18.12.2011
comment
Вот что я получаю за использование Google :-) Обновлено - я всегда сам использую cin, но это дает результат. - person Tom van der Woerdt; 18.12.2011
comment
Вокруг \n должны быть одинарные кавычки. '\п'. \n - это cstring, а не char. - person Lalaland; 18.12.2011

добавьте cin >> SomeVariableThatCouldAcceptAnythingInCaseYouPressSomethingElseBeforeTheEnterKey либо до, либо после cout, в зависимости от того, что вам нравится.

person LeleDumbo    schedule 18.12.2011

Просто прочитать строку, верно?

#include <string>
....


for (i=0;i<20;i++)
{
    std::string str;
    cin >> str; // this should pause until the user presses enter
    cout << (rand()%8) << endl;

};
person selbie    schedule 18.12.2011
comment
Я думаю, что это ждет, пока вы действительно не введете хотя бы один непробельный символ, не так ли? - person Christian Rau; 18.12.2011

Как насчет простого cin.get()? Нет необходимости ни во временной переменной, ни в функциях C.

person Christian Rau    schedule 18.12.2011