Я пишу небольшую программу оболочки, но я даже не могу прочесть строку ввода. Я использую cin.getline(), чтобы читать предоставленные пользователем аргументы в текстовом буфере, но он не работает. Код:
int main(int argc, char *argv[])
{
char buffer[1024];
cout << "John Shell>>";
cin.ignore(17);
cin.getline(buffer, 1024);
cout << buffer << endl;
return 0;
}
Я пытаюсь использовать cin.ignore(); игнорировать мое приглашение, а также символ новой строки. Все, что происходит, это то, что после того, как я нажимаю кнопку ввода, я просто получаю пустой вывод. буфер никогда не печатается. Я ценю любую помощь
Я пытаюсь использовать cin.ignore(); игнорировать приглашение
Тогда нет. Вам не нужно. Вход, который вы берете из буфера cin
отделяется от того, к какому потоку передается символ cout
устройства.
cin.ignore(17)
просто ждет, пока не будет проигнорировано 17 символов, поэтому cin.getline(buffer, 1024)
сможет читать только те, которые остались (если они есть).
Вы должны использовать эту функцию для игнорирования нежелательных символов, которые ждут во входном буфере, например, когда вы столкнулись с этим синтаксическим анализом:
int i;
if (cin >> i) {
cout << "You entered: " << i << '\n';
} else {
// input not an integer, get rid of it:
cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n');
}
И там более простой и надежный способ взять строку ввода:
std::string line;
std::getline(std::cin, line);
Отсутствие ошибок при каждом запуске и отсутствие переполнения буфера. std::string
будет автоматически расти, чтобы вмещать любой размер ввода, вплоть до доступной памяти.
cin.ignore(17);
линия?
\n
- это пробелы), вы можете использоватьcin >> ws;
, Чтобы игнорировать любой символ до a\n
, вы можете использоватьcin.ignore(x, '\n');
гдеx
может быть числом илиstd::numeric_limits<std::streamsize>::max()
.std::getline()
из<string>
, и тогда вам не придется иметь дело с буферами фиксированного размера.