无法在文本文件中正确写入数据

时间:2014-11-17 10:09:59

标签: c

我编写了以下程序,在文件中打印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位上运行上述程序。

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

fwrite函数将内存块写入文件,在这种情况下,您的内存块是二进制形式的整数。例如,32位big-endian格式的十进制整数314,1594CB2F16)将作为十六进制数字存储在内存中:

+----+----+----+----+
| 00 | 04 | CB | 2F |
+----+----+----+----+

因此,将该内存块写入文件通常不会导致人类可读的任何内容,除非您有一个不寻常的数字,如1348565002175661392(取决于字节序)。< / 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/