Вы можете использовать метод Ruby # source_location http://ruby-doc.org/core-2.5.1/Method.html#method-i-source_location Вы можете использовать его с binding.pry
как Стефан предложил или просто распечатал результат #source_location перед тем, как вызывать конкретный метод (так что вы можете быть уверены, что область действия такая же).
Вы, вероятно, захотите попробовать std::getline
:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
Попытайтесь освободить буфер cin (он буферизуется по умолчанию).
Я нахожу это для ввода данных пользователем std::getline
работы очень хорошо.
Можно использовать его, чтобы считать строку и просто отбросить то, что это читает.
Проблема с выполнением вещей как это,
// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;
std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?
это, если пользователь вводит другой мусор, например, "4.5 - об" этом слишком легко выйти из синхронизации и считать то, что пользователь записал в прошлый раз прежде, чем распечатать подсказку, которую он должен видеть в следующий раз.
Если Вы читаете каждую полную строку с std::getline( std::cin, a_string )
и затем проанализируйте возвращаемую строку (например, использование istringstream или другой техники), намного легче сохранить печатные подсказки в синхронизации с чтением из станд.:: cin, даже перед лицом искаженного входа.