Проблема в том, что после первого чтения поток выглядит следующим образом
:yes:no:334
, поэтому первый getline
будет читать пустую строку перед ":", второй будет красным "да", и последнее целочисленное извлечение не удастся.
Используйте getline
полностью и конвертируйте в целые числа по мере продвижения;
int main(){
string token;
ifstream infile("lol.txt");
getline(infile, token, ':');
int three = std::stoi(token);
string one;
getline(infile, one, ':');
string two;
getline(infile, two, ':');
getline(infile, token, ':');
int four = std::stoi(token);
cout << three << one << two << four;
return 0;
}
(Обработка ошибок оставлена как упражнение.)