C 错误:在';输入';
所以,我对C代码还不熟悉,我很难理解我做错了什么。我一直在下面我留下评论的几行中得到标题中提到的错误C 错误:在';输入';,c,C,所以,我对C代码还不熟悉,我很难理解我做错了什么。我一直在下面我留下评论的几行中得到标题中提到的错误 typedef struct input{ double x; double y; double u; double v; double rho; } input_t; void read_file(); void read_file(){ int i = 0, count = 0; char c; FILE *fp;
typedef struct input{
double x;
double y;
double u;
double v;
double rho;
} input_t;
void read_file();
void read_file(){
int i = 0, count = 0;
char c;
FILE *fp;
fp = fopen ("flow_data.csv", "r");
if (fp == NULL){
printf("Error reading file, exiting...");
exit(EXIT_FAILURE);
}
while (!feof(fp)) {
fscanf(fp, "%f %f %f %f %f", &input_t[i]->x, &input_t[i]->y, &input_t[i]->u, &input_t[i]->v,
&input_t[i]->rho); //getting the issue here
i++;
}
for (i = 1; ; i++) {
printf("x: %f, y: %f, u: %f, v: %f, rho: %f \n", &input_t[i]->x, &input_t[i]->y,
&input_t[i]->u, &input_t[i]->v, &input_t[i]->rho); //getting the issue here
}
for (c = getc(fp); c != EOF; c = getc(fp)) {
if (c == '\n') {
count = count + 1;
}
}
printf("The file has %d lines\n ", count);
}
我曾尝试在网上查找解决方案,但我很难看出我做错了什么。任何提示或指导都很好:)提前谢谢
是一个类型名,不能用作数组。您必须声明一个数组变量,如input\t
input_t data[100000]编码>并像使用
一样使用它,而不是使用数据[i]
输入[i]
运算符用于访问指针指向的结构的成员。您应该使用->
操作符直接访问结构- 在
scanf()。(最好使用
通过%f
printf()打印
)double
- 您在(!feof(fp))时的用法是。在执行
i++之前,应该检查
是否成功代码>fscanf()
- (i=1;;i++)的循环
将无限运行,并将导致访问超出范围。您应该为该循环使用另一个变量,并将该循环限制为
(在进入该循环之前,i
的值)i
- 您在
中通过了printf()
的double*
,而%f
是预期的。这将调用未定义的行为。您应该删除double
的参数中的所有printf()
s&
- 变量
的类型应该是c
而不是int
,因为返回char
并将其赋值给int
将很难区分普通字符和char
EOF
- 你应该做
fclose(fp)代码>成功打开文件并读取所需内容后
#include <stdio.h>
#include <stdlib.h>
#define MAX_DATA_NUM 100000
typedef struct input{
double x;
double y;
double u;
double v;
double rho;
} input_t;
void read_file();
void read_file(){
int i = 0, j, count = 0;
int c;
input_t data[MAX_DATA_NUM];
FILE *fp;
fp = fopen ("flow_data.csv", "r");
if (fp == NULL){
printf("Error reading file, exiting...");
exit(EXIT_FAILURE);
}
while (i < MAX_DATA_NUM) {
if(fscanf(fp, "%lf %lf %lf %lf %lf", &data[i].x, &data[i].y, &data[i].u, &data[i].v,
&data[i].rho) == 5)
i++;
else break;
}
for (j = 0; j < i; j++) {
printf("x: %f, y: %f, u: %f, v: %f, rho: %f \n", data[j].x, data[j].y,
data[j].u, data[j].v, data[j].rho);
}
for (c = getc(fp); c != EOF; c = getc(fp)) {
if (c == '\n') {
count = count + 1;
}
}
fclose(fp);
printf("The file has %d lines\n ", count);
}
#包括
#包括
#定义最大数据数量100000
类型定义结构输入{
双x;
双y;
双u;
双v;
双rho;
}输入;
无效读取_文件();
无效读取_文件(){
int i=0,j,计数=0;
INTC;
输入数据[最大数据数量];
文件*fp;
fp=fopen(“flow_data.csv”,“r”);
如果(fp==NULL){
printf(“读取文件时出错,正在退出…”);
退出(退出失败);
}
而(i
请注意,包含除最后一行以外的有效数据的行不会被计算在内,因为它们被数据读取部分使用。您似乎对基本信息有一些误解。您正在使用
input\t
(类型名称)作为数组。您不会编写fscanf(…,&int[i])代码>,您愿意吗?输入文件的格式是什么?您的scanf()
不会超出,
。