Попытка прочитать строку ввода с клавиатуры в C

#c #xcode #cin

#c #xcode #cin

Вопрос:

Я пытаюсь выполнить задание колледжа на C , и у меня возникают проблемы с тем, что должно быть очень простой операцией. Я пытаюсь прочитать строку символов с клавиатуры. Это соответствующий код:

   string t;
  cout << endl << "Enter title to search for: ";
  getline(cin, t, 'n');  
  

Я понимаю, что последняя строка должна считывать буфер ввода (в данном случае cin) и сохранять символ в строке ‘t’ до тех пор, пока он не достигнет символа новой строки, а затем продолжить выполнение программы.

Однако, когда я запускаю свой код в XCode, он просто как бы перепрыгивает через getline функцию и обрабатывает ‘t’ как пустую строку.

Что происходит? Я пытался использовать cin >> t , но это просто читает символы навсегда — Почему я не могу заставить это работать?

Ответ №1:

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

Чтобы исправить это, убедитесь, что вы очистили буфер ввода после каждой операции ввода, которая логически должна использовать строку ввода.

Один из простых способов — всегда использовать getline в string , а затем использовать, например, istringstream , если вы хотите преобразовать числовую спецификацию в числовой тип.

Приветствия и hth.,

Комментарии:

1. Абсолютно правильно во всех отношениях (и istringstream, кстати, потрясает!), большое вам спасибо.

Ответ №2:

На странице документов это выглядит так, как вы хотите

 cin.getline(t,256,'n');
  

или что-то подобное.

Комментарии:

1. На самом деле существует несколько версий getline. Существует автономная функция std::getline(), а также std::istream::getline(). cplusplus.com/reference/string/getline

Ответ №3:

Это звучит как проблема с тем, как Xcode запускает вашу программу. Попробуйте запустить свою программу непосредственно с терминала и посмотрите, достаточно ли этого для устранения вашей проблемы.