Вы можете изменить разделитель на двоеточие. См. этот ответ для получения дополнительной информации
Или более простой подход - использовать функцию getline()
:
istream& getline (istream& is, string& str, char delim)
Итак, для вашего примера:
int itemNo;
string category;
string descript;
ifstream infile("menu.txt");
infile >> itemNo;
getline(infile, category, ':');
getline(infile, descript);
cout << category << " - " << descript << " - " << itemNo <<'\n';
Это даст:
Fish Dish - Fish and chips - 1
Чтобы избавиться от дополнительного места в начале Fish Dish, добавьте дополнительную getline.
int itemNo;
string category;
string descript;
ifstream infile("menu.txt");
infile >> itemNo;
getline(infile, category, ' ');
getline(infile, category, ':');
getline(infile, descript);
cout << category << " - " << descript << " - " << itemNo <<'\n';