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

标签 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 " 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 |
+----+----+----+----+

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

为了以人类可读的格式编写整数,您只需使用 fprintf非常类似于您使用它打印到标准输出的方式:

fprintf (fp, "%d\t", j);
printf ("%d\t", j ) ;

关于c - 无法在文本文件中正确写入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970207/

相关文章:

编译错误 "Incomplete definition of type ' struct proc'”

c - 为 Unix 和 Windows 编写应用程序

c++ - 在 C 中写入 C++ 指针

c - 如何创建空堆栈?

c - 添加小部件时更新 Gtk 容器

c - 如何在c中显示次正规数?

c - 从宏生成 `#define`

c - 嵌入式 Linux(32 位)的 2038 年解决方案?

c - 将多维可变长度数组传递给函数

c - 二维数组和指针 - C