cin.getline не работает должным образом

0

Я пишу небольшую программу оболочки, но я даже не могу прочесть строку ввода. Я использую 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(); игнорировать мое приглашение, а также символ новой строки. Все, что происходит, это то, что после того, как я нажимаю кнопку ввода, я просто получаю пустой вывод. буфер никогда не печатается. Я ценю любую помощь

  • 0
    Чтобы игнорировать любые пробелы ( \n - это пробелы), вы можете использовать cin >> ws; , Чтобы игнорировать любой символ до a \n , вы можете использовать cin.ignore(x, '\n'); где x может быть числом или std::numeric_limits<std::streamsize>::max() .
  • 1
    Кстати, вместо этого проще использовать std::getline() из <string> , и тогда вам не придется иметь дело с буферами фиксированного размера.
Показать ещё 1 комментарий
Теги:
visual-c++-2010

1 ответ

0

Я пытаюсь использовать 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 будет автоматически расти, чтобы вмещать любой размер ввода, вплоть до доступной памяти.

  • 0
    Это имеет смысл, но, например, если я ввожу «привет» после приглашения, а затем нажимаю «Ввод», буквально все, что происходит, это то, что я получаю перевод строки. буфер не выводится на экран
  • 0
    @JohnDodson работает на меня. Вы удалить cin.ignore(17); линия?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню