スペース/改行で区切られた数字のファイルを読み込んでいます。stringstreams と ifstreams を試した後、単純さ、読みやすさ、または効率の点で、C++ はこの単純なタスクの fopen と fscanf をあまり改善していないようです。
堅牢性はどうですか?fscanf が期待する数のアイテムを返したことを確認したので、これは問題ではないようです。私が考えることができる唯一の利点は、障害を処理するためのより多くのオプションを提供する stringstream です。
fscanf を使用した簡単な例を次に示します。
FILE * pFile;
pFile = fopen ("my_file.txt","r");
if( pFile == NULL ) return -1;
double x,y,z;
int items_read;
while( true )
{
items_read = fscanf( pFile, "%lf %lf %lf", x, y, z );
if( items_read < 3 ) break; // Checks for EOF (which is -1) or reading 1-2 numbers
std::cout << x << " " << y << " " << z << "\n";
}
注: セキュリティを強化するために、Visual Studio で fopen/fscanf を fopen_s/fscanf_s に置き換えることができます。