簡體   English   中英

Fprintf不會將數組寫入文件

[英]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元素,這意味着其索引從0n-1 ,但是從0n循環。 更改循環條件以解決此問題:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM