c - 从文件读取不会返回任何内容,但会被访问
问题描述
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp ;
int n,i,x[n];
fp=fopen("fin.txt","r");
if (fp == NULL) {
puts("Error opening filename.txt");
return EXIT_FAILURE;
}
fscanf("%d",&n);
for (i=0;i<n;i++)
fscanf("%d",&x[i]);
printf("%d ",n);
fclose(fp);
return 0;
}
我正在尝试从文件中读取,尽管它不打印任何内容。我检查了它是否打开了文件,它确实打开了。虽然没有返回数据。这是为什么?输入文件:5 3 4 5 8 2 ----------------------------------------- --EDIT : 该文件是项目的文件夹。
解决方案
你没有fscanf
正确调用。
第一个参数fscanf
是FILE *
你要读取的文件。您省略了此参数,因此该函数将您传入的字符串作为第一个参数并尝试将其作为FILE
对象读取。
fp
作为每个调用中的第一个参数传递。
这也不符合您的预期:
int n,i,x[n];
这并不意味着数组的大小x
与n
. 这意味着 的大小x
设置为 的当前值n
,该值尚未被赋值。
x
在读入 for 的值之后移动 to 的声明n
。
int rval = fscanf(fp, "%d",&n);
if (rval != 1) return EXIT_FAILURE;
int x[n];
for (i=0;i<n;i++)
fscanf(fp, "%d",&x[i]);
推荐阅读
- node.js - 通过 Node.js 从 API 请求信息
- python - 如何使用包含占位符的“subprocess.check_call”运行“ls”命令?
- ios - 删除自定义数组中元素的安全优雅的方式,Swift
- mongodb - 如何更改嵌入类型的属性名称?
- scala - 如何通过改变随机值获得加特林模拟
- python - 在 pandas 数据框列中仅保留重复四次以上的行
- c# - 为什么我不能从反序列化的 Newtonsoft json 访问这个动态属性
- cloudflare - Nginx 源服务器的 cloudflare 缓存有什么问题?
- docker - Kubernetes:在部署 Laravel 应用程序时无法运行 Kompose
- css - react-bootstrap 的进度条未显示