在遇到问题时试图读取文本文件的整数。当我有麻烦Ç

问题描述:

从文件中读取一个整数:在遇到问题时试图读取文本文件的整数。当我有麻烦Ç

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    int op; 

    /* Open file for both reading and writing */ 
    FILE *d = fopen("intento1.txt", "r"); 
    FILE *f = fopen("bubbletry.txt", "w+"); 

    /* Read and display data */ 
    fread(&op, 4, 1, d); 

    printf("%d\n", &op); 
    fclose(d); 
    /* Write data to the file */ 
    fprintf(f,"%d\n",&op); 

    fclose(f); 

    return(0); 
} 

在“intento1.txt”第一个数字是30771, 但写在“bubbletry.txt”上的文字是926363699。 你能告诉我为什么会发生这种情况吗?

通常为了读取整数等,您可以使用fscanf来代替。这比fread更方便。

fscanf(fp, "%d", &n); 

有关示例,检查http://www.cplusplus.com/reference/cstdio/fscanf/

+0

谢谢! :D这是非常有帮助的 –

+1

fread是读取二进制数据。 fscanf用于将二进制数据视为所需的格式 –

因为你读取的前4个字节的intento1.txt, '3', '0', '7' '7',成整数。 '3'是0x33,'0'是0x30,'7'是0x37。因此,您最终在0x33303737中读取,但由于您处于小端架构,所以字节会反转为0x37373033,这是926363699的十六进制表示形式,即您使用fprintf在其中打印到文件的ascii表示形式。

你想要的是从ascii表示中扫描整数,或者通过拉入字符串并转换它或使用fscanf之类的东西。请记住,数字的二进制表示与ASCII表示不同。

除了有关使用fread()的答案外,您还没有正确地将预期的参数传递给您的函数。虽然fread()需要指针作为参数(指向变量)读取,但printf()fprintf()都要求打印格式化参数的(而不是地址!)。因此,在参数传递相同的语法适用于这两种功能:

printf("%d\n", op); 

fprintf(f,"%d\n", op); 

您也可以找到有用的阅读这些帖子SO:freadreading text files with freadfprintf