double *array_out;
.......
FILE * pFile;
pFile = fopen ("Q1_n_iter.bin", "wb");
fwrite(array_out,sizeof(double),n*n,pFile);
fclose (pFile);
我检查过array_out是否正确填充,我无法弄清楚为什么它会打印垃圾而不是值。
答案 0 :(得分:0)
写入文件的值fwrite
不能直接用肉眼读取。您应该让计算机使用fread
或其他东西为您解释它们。例如,您可以执行以下操作:
#include <stdio.h>
#include <stdlib.h>
char * filename = "Q1_n_iter.bin";
int main( ) {
double * array_out;
double * array_in;
FILE * pFile;
array_out = malloc( 3 * sizeof * array_out );
array_out[0] = 0.12;
array_out[1] = 1.35;
array_out[2] = 2.80;
pFile = fopen( filename, "wb" );
fwrite( array_out, sizeof * array_out, 3, pFile );
fclose( pFile );
free( array_out );
array_in = malloc( 3 * sizeof * array_in );
pFile = fopen( filename, "rb" );
fread( array_in, sizeof * array_in, 3, pFile );
for ( int i = 0; i < 3; i++ )
printf( "%d: %.2f\n", i, array_in[i] );
free( array_in );
return 0;
}
并会收到以下输出:
0: 0.12
1: 1.35
2: 2.80
如果要将格式化数据打印到文件中,供人阅读,那么您应该使用函数fprintf
。它的工作方式与printf
类似,还有一个用于指定输出流的附加字段。
fprintf( FILE * stream, const char * FormatString, ... );
在您的情况下,您应该按以下方式进行:
// ...
for ( int i = 0; i < n * n; i++ )
fprintf( pFile, "%.2f ", array_out[i] );
// ...
如果您不想将小数点后面的6位数作为默认值,请删除".2"
,如果您想要任何其他精度,请指定另一个数字。
要使用命令行参数确定文件名来创建文件,您可以执行以下操作:
#include <stdio.h>
#include <stdlib.h>
char * filename;
int main( int argc, char * argv[] ) {
// declarations
// and what not
filename = malloc( 256 );
sprintf( filename, "Q1_%d_%d.bin", n, iter );
// whatever
free( filename );
return 0;
}
或者,如果您不想使用sprintf
,请添加string.h
库并:
// ...
strcpy( filename, "Q1_" );
strcat( filename, argv[1] );
strcat( filename, "_" );
strcat( filename, argv[2] );
strcat( filename, ".bin" );
// ...