Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/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
C 错误:在';输入';_C - Fatal编程技术网

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;

所以,我对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;

    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()
不会超出