Проблема здесь в том, что когда вы задаете свой собственный разделитель для getline
, он перестает использовать символ новой строки в качестве разделителя.Это означает, что в вашем первом цикле вы читаете в Left1:
, отбрасываете :
, а info
остается с Left1
.Вторую итерацию, которую вы снова читаете, пока не увидите :
, поэтому вы читаете в Right1\nLeft2:
, отбросьте :
, оставляя info
с Right1\nLeft2
.
Что вам нужно сделать, это либочитать всю строку, а затем использовать поток строк, чтобы разобрать его, как
while (getline(myfile, info)){
stringstream ss(info)
while (getline(ss, info, ':') // this works now because eof will also stop getline
cout << info << " " << info.back() << "\n";
}
Или, поскольку вы знаете, что вам просто нужно два значения, получите их оба, прочитав каждую часть строки, как
while (getline(myfile, info, ':')){
cout << info << " " << info.back() << "\n";
getline(myfile, info);
cout << info << " " << info.back() << "\n";
}