我最初编写这个程序只是为了显示十进制整数的二进制形式,但我发现它很简单,因为它只是使用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àþ#
答案 0 :(得分:4)
因为您打开了文件以进行只写访问。您无法从中读取,并且您没有检查fscanf
的返回值,因此您没有看到它失败。
如果您还希望能够回读您写的内容,请将模式"w"
更改为"w+"
。