Эта программа дает мне странную ошибку, которую я просто не могу понять, она говорит о вещах вне объекта диапазона. Когда я запускаю эту программу без std::cin >> firstLast;
, вместо этого я просто жестко программирую строку firstLast во что-то другое, она работает. Я этого нигде не видел и много дней искал, почему это не работает.Программа не печатает требуемую строку
#include "stdafx.h"
#include <string>
#include <iostream>
int main()
{
//Declaring firstLast string
std::string firstLast;
//Asking for input for last and first name (same string)
std::cout << "Enter your first and last name below." << "\n>>";
//Getting firstLast value from user
std::cin >> firstLast;
//This finds the space in the string so I can seperate the first and last name into different strings
int index = firstLast.find(' ');
/*
This makes a substring. The substring starts at index (the beginning of the surname) and goes on for the size of the surname (which is equal to the length of firstLast - first name length).
Ex: Name - "John Hopkins"
Length of "John" = 4
Length of " Hopkins" = firstLast.length() - 4
*/
std::string lastName = firstLast.substr(index, firstLast.length() - index);
//Printing the found surname
std::cout << "Your surname is " << lastName << "." << std::endl;
int rnd; std::cin >> rnd; return 0;
}
Я действительно не знаю, почему это не работает, если я жестко закодировать строку firstLast, он работает, но когда я использую КИН, чтобы получить строку, он выходит из строя и дает мне ОШИБКА:
Unhandled exception at 0x7626D928 in Test.exe: Microsoft C++ exception: std::out_of_range at memory location 0x0018F374.
Сразу после 'std :: cin >> ...', поместите в' std :: cout << firstLast << std:; endl; 'и посмотрите, что он вам скажет. – Beta
Избавьтесь от '#include', потому что это не обязательно в небольших программах. Преимущества прекомпиляции заголовков в небольших программах не являются существенными. –
'firstLast.substr (index, firstLast.length() - index)' => на самом деле, вы можете уйти с 'firstLast.substr (index)', потому что по умолчанию 'substr' берет все, начиная с' index', до тех пор, пока конец. Второй аргумент действительно необходим, только если вам нужно сократить до конца. –