为什么fprintf()/ fscanf()/ printf()在我的Dec-to-Binary程序中显示错误的输出,而printf()& sscanf()工作得很好?

时间:2013-05-11 03:56:27

标签: c scanf printf

我最初编写这个程序只是为了显示十进制整数的二进制形式,但我发现它很简单,因为它只是使用prinf()并排打印这些位。所以我使用了sprintf()将它写入字符串,当我使用sscanf()检索它并显示它时,它工作正常。

但如果我想使用fprintf()/fscanf()/printf()将结果写入文件,使用fprintf()检索并将其显示在屏幕上,fscanf()组合会出现一些难以理解的问题。它只是显示一个损坏的输出。奇怪的是当我在记事本中打开文件时,它有整数那个整数的二进制形式。但它不会在屏幕上显示它。看到一个小问题,但我可以'什么。我会很感激你的答案。

编辑您可以直接跳转到rewind(fp)部分,因为问题可能出在后面的3行中。

#include<stdio.h>
#include<stdlib.h>

void bform(int);

int main()
{
    int source;
    printf("Enter the integer whose binary-form you want\n");
    scanf("%d",&source);
    printf("The binary-form of the number is :\n");
    bform(source);
    return 0;
}

void bform(int source)
{
    int i,j,mask;
    char output[33],foutput[33];
    FILE *fp;
    fp=fopen("D:\\final.txt","w");

    if(fp==NULL)
    {
        printf("I/O Error");
        exit(-1);
    }

    for(i=31; i>=0; i--)
    {
        mask=1;

        //Loop to create mask
        for(j=0; j<i; j++)
        {
            mask=mask*2;
        }

        if((source&mask)==mask)
        {
            sprintf(&output[31-i],"%c",'1');
            printf("%c",'1');
            fprintf(fp,"%s","1");
        }
        else
        {
            sprintf(&output[31-i],"%c",'0');
            printf("%c",'0');
            fprintf(fp,"%s","0");
        }
    }

    printf("\nThe result through sprintf() is %s",output);
    rewind(fp);
    fscanf(fp,"%s",foutput);
    printf("\nThe result through fprintf() is %s",foutput); //Wrong output.
    fclose(fp);

}

输出:

Enter the integer whose binary-form you want  25
The binary-form of the number is :
00000000000000000000000000011001
The result through sprintf() is 00000000000000000000000000011001
The result through fprintf() is ÃwxÆwàþ#

1 个答案:

答案 0 :(得分:4)

因为您打开了文件以进行只写访问。您无法从中读取,并且您没有检查fscanf的返回值,因此您没有看到它失败。

如果您还希望能够回读您写的内容,请将模式"w"更改为"w+"