Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Fprintf不将数组写入文件_C_Arrays_File_Printing - Fatal编程技术网

C Fprintf不将数组写入文件

C Fprintf不将数组写入文件,c,arrays,file,printing,C,Arrays,File,Printing,我有一个代码,它应该读取数组,将其写入二进制文件和文本文件,然后打印文件。但是,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")

我有一个代码,它应该读取数组,将其写入二进制文件和文本文件,然后打印文件。但是,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);
}
#包括
#包括
#包括
int main()
{ 
文件*f,*b;
如果(f=fopen(“fis.txt”,“w+”==NULL){
printf(“错误\n”);
出口(1);
}
如果(b=fopen(“binar.txt”,“w+b”)==NULL){
printf(“错误\n”);
出口(1);
}
浮点*v;整数n;
chars[1000];
scanf(“%d”和“&n”);
v=malloc(n*sizeof(float));
int x,y;

对于(int i=0;i而言,主要问题是如何打开文件:

if (f=fopen("fis.txt","w+")==NULL) { 
相等运算符
==
的优先级高于赋值运算符
=
。因此,首先将
fopen
的结果与NULL进行比较,然后将该比较的结果(即0或1)赋值给
f
。因此
f
没有指向有效位置,这就是
fprintf的原因调用失败。如果编译器上出现警告,它应该警告不要将整数指定给指针

添加括号以获得正确的顺序:

if ((f=fopen("fis.txt","w+"))==NULL) {
以及:

此外,循环条件不正确:

for (int i=0;i<=n;i++) { 
在从每个文件描述符读回之前,您还需要对其调用
倒带
,以便读取刚刚编写的内容:

rewind(f);
fgets(s,sizeof(s),f); 
puts(s); 
printf("\n");

rewind(b);
fgets(s,sizeof(s),b);
puts(s);
printf("\n");

主要问题是如何打开文件:

if (f=fopen("fis.txt","w+")==NULL) { 
相等运算符
==
的优先级高于赋值运算符
=
。因此,首先将
fopen
的结果与NULL进行比较,然后将该比较的结果(即0或1)赋值给
f
。因此
f
没有指向有效位置,这就是
fprintf的原因调用失败。如果编译器上出现警告,它应该警告不要将整数指定给指针

添加括号以获得正确的顺序:

if ((f=fopen("fis.txt","w+"))==NULL) {
以及:

此外,循环条件不正确:

for (int i=0;i<=n;i++) { 
在从每个文件描述符读回之前,您还需要对其调用
倒带
,以便读取刚刚编写的内容:

rewind(f);
fgets(s,sizeof(s),f); 
puts(s); 
printf("\n");

rewind(b);
fgets(s,sizeof(s),b);
puts(s);
printf("\n");

关闭循环中的1个错误。尝试扫描到
v[0]
v[1]
,…
v[n-1]
v[n]
;但
v[n]
不存在。
int i=0;iTry
perror
打印错误原因(基于
errno
的值);大多数标准库函数在失败时设置
errno
。谢谢。我修改了它,但它仍然不起作用。我强烈建议您在编译时启用所有警告,并将任何警告视为错误。我希望大多数编译器都会对赋值错误发出警告。诚然,警告消息可能有点模糊,可能类似于“从整数到指针的转换”,但它至少会将您指向出错的行。在这种情况下,要做的第一件事是删除您不完全确定的任何内容,这可能包括在没有括号的情况下链接多个运算符。关闭循环中的1个错误。尝试扫描到
v[0]
v[1]
,…
v[n-1]
v[n]
;但是
v[n]
不存在。
int i=0;iTry
perror
打印错误原因(基于
errno
的值);大多数标准库函数在失败时设置
errno
。谢谢。我修改了,但仍然不起作用。我强烈建议您在编译时启用所有警告,并将任何警告视为错误。我希望大多数编译器都会对赋值错误发出警告。诚然,警告消息可能有点模糊,可能类似于“从整数到指针的转换",但它至少会指出一条有问题的线。在这种情况下,首先要做的是清除任何你不完全确定的东西,这可能包括在没有括号的情况下链接多个运算符。同意,这是我所说的fopen,很奇怪她没有看到她甚至不能打开输入文件我没有发现任何错误,我忽略了括号。谢谢。@MaryPoppins很高兴我能帮上忙。如果你觉得有用,请随意。同意,这是我说的关于fopen的内容,很奇怪她没有看到她甚至无法打开输入文件。我没有发现任何错误,我忽略了括号。谢谢。@MaryPop很高兴我能帮上忙。如果你觉得有用的话,请随时联系。