Напишите либо так
string data;
while ( getline( fin, data ) )
{
cout << data << endl;
}
либо так
string data;
while ( getline( fin, data ) )
{
cout << data << '\n';
}
либо так
string data;
while ( fin >> data )
{
cout << data << std::endl;
}
либо так
string data;
while ( fin >> data )
{
cout << data << '\n';
}
В последних двух случаях вы вообще можете использовать некоторый арифметический тип, который соответствует вводимым значениям.
Например,
int data;
while ( fin >> data )
{
cout << data << '\n';
}
Можно еще использовать алгоритм std::copy, объявленный в заголовке <algorithm>, вместо цикла while.
Например
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
//...
std::ifstream fin( "/Users/Margarita/XCode/Full_As1/user_file.txt" );
std::copy( std::istream_iterator<int>( fin ),
std::istream_iterator<int>(),
std::ostream_iterator<int>( std::cout, "\n" ) );
Имейте в виду, что ваш цикл на самом деле некорректный
while (!fin.eof())
{
getline (fin,data);
cout<< data
}
Проблема в том, что состояние конца файла может наступить в момент выполнения предложения
getline (fin,data);
В этом случае в строку data ничего не будет введено. Тем не менее вы ее выводите на консоль следующим предложением
cout<< data
Эффект может быть таким, что последняя запись в файле будет выведена два раза.
!eofобычно не являются корректными. В С и С++eof- это, по определению, условие завершения предыдущей операции ввода-вывода. Для завершения чтения проверяйте, что возвращаетgetline. Не пытайтесь использоватьeofдля этой цели. – AnT stands with Russia Jul 30 '15 at 18:59