C++ :: Функция для возврата пользовательского ввода до тех пор, пока не будет нажата клавиша ввода

Это определенно НЕ текущий синтаксис, но просто чтобы вы поняли идею :)

#include <stdio.h>

void getWord()
{
    while((c=getchar())!='\n')
    {
        myString.=c;
    }
    return myString;
}

int main(void)
{
    var c=getWord();
    print_f("\nCLast Word:",c);
    return 0;
}

Имейте в виду, что я не делаю ничего, чтобы сломать текущую строку, и я ожидаю получить пользовательский ввод и остаться на той же строке даже после нажатия клавиши ввода.


person AceOfSpades    schedule 16.06.2018    source источник
comment
просто используйте std::getline? А зачем getWord, если вы хотите получить ввод до ввода?   -  person Klaus    schedule 16.06.2018
comment
В большинстве окон консоли весьма вероятно, что курсор перемещается вниз при нажатии Enter. С другой стороны, если вместо этого вы удалите \n из вывода, никто не заметит разницы.   -  person Bo Persson    schedule 16.06.2018
comment
в конечном итоге это будут getWord и getQuote, это был просто пример: D...   -  person AceOfSpades    schedule 16.06.2018
comment
Насколько я знаю, консоль Windows отправляет программе ввод только при нажатии Enter, поэтому вы не можете прочитать ввод до того, как это произойдет.   -  person BessieTheCookie    schedule 16.06.2018


Ответы (1)


Используйте std::getline. Функция читает одну строку из входного потока и сохраняет ее в строку.

#include <iostream>
#include <string>

int main() {
    std::string input;
    std::getline(std::cin, input); // get input until enter key is pressed
    std::cout << input << std::endl; // print the string
    return 0;
}

или вы можете опустить std:: "используя пространство имен std;"

#include <iostream>
#include <string>

using namespace std;

int main() {
    string input;
    getline(cin, input); // get input until enter key is pressed
    cout << input << endl; // print the string
    return 0;
}
person paxbun    schedule 16.06.2018
comment
Работает (почти идеально). Я использовал getchar по какой-то причине... Я не хочу получать новую строку после нажатия клавиши ввода... Я хочу оставаться на той же строке - person AceOfSpades; 16.06.2018
comment
Стандартные библиотеки ввода-вывода C++ имеют только функции, которые считывают ввод из потока, что означает, что для получения строки на консоли необходимо нажать клавишу ввода. Если вы хотите получить ввод без нажатия клавиши ввода, вы должны использовать нестандартные функции, такие как _getch() в ‹conio.h› в Windows. - person paxbun; 16.06.2018