#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:
Комментарии:
1. На самом деле существует несколько версий getline. Существует автономная функция std::getline(), а также std::istream::getline(). cplusplus.com/reference/string/getline
Ответ №3:
Это звучит как проблема с тем, как Xcode запускает вашу программу. Попробуйте запустить свою программу непосредственно с терминала и посмотрите, достаточно ли этого для устранения вашей проблемы.