我写了下面的程序在一个文件中打印 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 " E N : > @ - Q = [ _ * $ [ 5 \ R _ / G & E
C c # ^ ! I @ ) 5 D / , > 9 % ; ) N # Z * X ( * @ 0 .
Z F 2 ] 0 T 6 8 ( B L
, ' % & R ) ! ' : M
I V - H F M I a V Z = $ 7 C 7 J 4 2 2 ) B [ % 9 W 5 S - : X . D [ > 7 ; % 0 S _ ) 2 [ $ J ` 0 c D T Q " 5 c & X C ] 0 S
我正在使用 visual studio 2010 在 windows 7 32 位上运行上述程序。
这里有什么问题?
最佳答案
fwrite
函数将内存块写入文件,在这种情况下,您的内存块是二进制形式的整数。例如十进制整数314,159
( 4CB2F<sub>16</sub>
) 以 32 位大端格式将作为十六进制数字存储在内存中:
+----+----+----+----+
| 00 | 04 | CB | 2F |
+----+----+----+----+
因此,将该内存块写入文件通常不会导致人类可读的任何内容,除非您有一个不寻常的数字,如 1348565002
或 175661392
(取决于字节顺序)。
为了以人类可读的格式编写整数,您只需使用 fprintf
,非常类似于您使用它打印到标准输出的方式:
fprintf (fp, "%d\t", j);
printf ("%d\t", j ) ;
关于c - 无法在文本文件中正确写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970207/