Вы используете объект, содержащий ссылку нулевого значения. Таким образом, он дает пустое исключение. В примере строковое значение равно null, и при проверке его длины произошло исключение.
Пример:
string value = null;
if (value.Length == 0) // <-- Causes exception
{
Console.WriteLine(value); // <-- Never reached
}
Ошибка исключения:
Необработанное исключение:
System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта. в Program.Main ()
blockquote>
cin >> T;
Это потребляет целое число, которое вы предоставляете на stdin.
При первом вызове:
getline(cin, line)
... вы потребляете новую строку после целого числа.
Вы можете получить cin
до ignore
новой строки, добавив следующую строку после cin >> T;
:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
(вам понадобится #include <limits>
для std::numeric_limits
)
Скорее всего, в вашем входном файле есть новая строка, и она обрабатывается немедленно, как описано на этой странице:
http://augustcouncil.com/~tgibson/tutorial/ iotips.html
Вы можете вызвать cin.ignore()
, чтобы он отклонил один символ, но вы можете прочитать больше советов, так как есть предложения о том, как обращаться с чтением в числах.
Эта строка читает только номер:
cin >> T;
Если вы хотите проанализировать ввод пользователя, вам нужно учесть, что они продолжают бить & lt; enter & gt; потому что вход буферизирован. Чтобы обойти это время, проще читать интерактивный ввод, используя getline. Затем проанализируйте содержимое строки.
std::string userInput;
std::getline(std::cin, userInput);
std::stringstream(userInput) >> T;