[英]Fprintf doesnt write array to file
我有一個代碼,應該讀取一個數組,將其寫入二進制文件和文本文件,然后打印文件。 但是,fprintf函數返回錯誤,我不知道為什么。 這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f,*b;
if (f=fopen("fis.txt","w+")==NULL) {
printf ("Error\n");
exit(1);
}
if(b=fopen("binar.txt","w+b")==NULL) {
printf ("Error\n");
exit(1);
}
float *v; int n;
char s[1000];
scanf("%d",&n);
v=malloc(n*sizeof(float));
int x,y;
for (int i=0;i<=n;i++) {
scanf("%f",&v[i]);
printf("%f",v[i]);
x=fprintf(f,"%f",v[i]);
if (x<0) printf("err\n");
y=fprintf(b,"%f",v[i]);
if (y<0) printf ("err2\n");
}
fgets(s,sizeof(s),f);
puts(s);
printf("\n");
fgets(s,sizeof(s),b);
puts(s);
printf("\n");
free(v);
fclose(f);
fclose(b);
}
主要問題是如何打開文件:
if (f=fopen("fis.txt","w+")==NULL) {
等價運算符==
優先級高於賦值運算符=
優先級。 因此,首先將fopen
的結果與NULL比較,然后將該比較的結果(即0或1)分配給f
。 因此f
不能指向有效位置,這就是為什么fprintf
調用失敗的原因。 如果您的編譯器出現警告,則應該警告您將整數分配給指針。
添加括號以獲得正確的順序:
if ((f=fopen("fis.txt","w+"))==NULL) {
和:
if ((b=fopen("binar.txt","w+b"))==NULL) {
另外,您的循環條件不正確:
for (int i=0;i<=n;i++) {
數組v
具有n
元素,這意味着其索引從0
到n-1
,但是從0
到n
循環。 更改循環條件以解決此問題:
for (int i=0;i<n;i++) {
您還需要在rewind
讀每個文件描述符之前對每個文件描述符調用rewind
,以便您可以閱讀剛剛編寫的內容:
rewind(f);
fgets(s,sizeof(s),f);
puts(s);
printf("\n");
rewind(b);
fgets(s,sizeof(s),b);
puts(s);
printf("\n");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.