我编写了以下程序,在文件中打印200个随机数:
int main()
{
FILE * fp;
fp = fopen ( "myfile.txt", "w" ) ;
if ( fp == NULL )
{
printf ( "Unable to create file." ) ;
exit ( 0 ) ;
}
int i, noofr=200, j ;
for ( i = 0 ; i < noofr ; i++ )
{
j = rand ()%100 ;
fwrite ( &j, sizeof ( int ), 1, fp ) ;
printf ( "%d\t", j ) ;
}
fclose ( fp ) ;
printf ( "\nFile is created. \nPress any key to continue." ) ;
return 0;
}
在控制台上,号码正确打印,但在文件中,我看到:
)C&#34; E N:&gt; @ - Q = [_ * $ [5 \ R _ / G&amp; Ë
C c#^! I @)5 D /,&gt; 9 %; )N#Z * X(* @ 0。
Z F 2] 0 T 6 8(B L
,&#39; %&amp; R)! &#39; :M
I V - H F M I a V Z = $ 7 C 7 J 4 2 2)B [%9 W 5 S. - : X 。 D [&gt; 7; %0 S _)2 [$ J`0 c D T. 问&#34; 5 c&amp; X C] 0 S
我使用visual studio 2010在Windows 7 32位上运行上述程序。
这里有什么问题?
答案 0 :(得分:1)
fwrite
函数将内存块写入文件,在这种情况下,您的内存块是二进制形式的整数。例如,32位big-endian格式的十进制整数314,159
(4CB2F16
)将作为十六进制数字存储在内存中:
+----+----+----+----+
| 00 | 04 | CB | 2F |
+----+----+----+----+
因此,将该内存块写入文件通常不会导致人类可读的任何内容,除非您有一个不寻常的数字,如1348565002
或175661392
(取决于字节序)。< / p>
为了以人类可读的格式编写整数,您只需使用fprintf
,非常类似于您使用它打印到标准输出的方式:
fprintf (fp, "%d\t", j);
printf ("%d\t", j ) ;
答案 1 :(得分:0)
您的问题在于使用 fwrite 函数而不是 fprintf 函数。
fwrite函数是一种常用于将二进制数据写入文件的函数。我们在文件中读取的数据通常是ASCII。 ASCII文本使用1个字节(8位或8 0/1个位置来填充)来表示每个字符。现在,当您将二进制数据放入文件时,您将1或0逐个放入文件中。
现在,当您打开文件时,1和0中的每一个都被转换为相应的ASCII值。
要使用fprintf函数,它与printf函数完全相似:
fprintf(fp,"%d",j);
如果您想了解更多信息:
http://www.c4learn.com/c-programming/c-reference/fwrite-function/
http://www.c4learn.com/c-programming/c-reference/fprintf-function/