car * ps = new car[n];
powinno być przed pętlą for, bo w tej chwili za każdym razem tworzysz nową tablicę
while(i == (n-1))
{
for(int j = 0; j < n; j++)
{
std::cout<<(*(ps+j)).marka<<" ";
std::cout<<(*(ps+j)).rok<<"\n";
}
delete ps;
takie coś powinno być po pętli for, bo sprawdzanie za każdym razem warunku skończenia pętli skoro wystarczy poczekać aż się ta pętla skończy jest bez sensu
i powinno być:
delete [] ps;
bo usuwasz tablicę