-1

我最初编写这个程序是为了简单地显示十进制整数的二进制形式,但我发现它很粗糙,因为它只是用来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àþ#
4

1 回答 1

4

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

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

于 2013-05-11T04:05:01.163 回答