1

これは、「.dat」ファイルからコンポーネントを読み取り、入力を Struct のメンバーに保存する関数を呼び出すプログラムの一部です。main.c から関数を呼び出そうとすると、試行内容に応じてさまざまなエラーが発生します。最も顕著なのは、'ReadFile' のタイプの競合と、関数 'ReadFile' への引数が少なすぎることです。また、「「ReadFile」から引数を渡すと、キャストなしでポインターから整数が作成されます」という警告といくつかの情報が表示されます。

これはmain.cです

#include "MyData.h"
#include "NodalA.h"
#include "FileHandling.h"
#include <stdio.h>
#include "windows.h"

int main(){

    ComponentType *CircuitData;
    int numComp = 6;
    int numEl = 0;
    int numNodes = 0;
    CircuitData = malloc((numComp)*sizeof(ComponentType));
    ReadFile(CircuitData, &numEl, &numNodes);

    return 0;
}

これは FileHandling.c です。

#include "FileHandling.h"
#include "stdio.h"

void ReadFile(ComponentType *CircuitData, int *numEl, int *numNodes){
    numEl = 0;
    numNodes = 0;

    int index = 0;

    FILE *data;
    data = fopen("mydata.dat", "r");

    if (data == NULL){
        printf("Error: \"mydata.dat\" could not be opened");
    }
    else {
        while(!feof(data)){
            fscanf(data, "%s, %s, %s, %f", CircuitData[index].name, CircuitData[index].node1, CircuitData[index].node2, CircuitData[index].value);

            *CircuitData[index].node1 = extractInteger(CircuitData[index].node1);
            *CircuitData[index].node2 = extractInteger(CircuitData[index].node2);

            if(*CircuitData[index].node1 > *numNodes)
                *numNodes = *CircuitData[index].node1;

            if(*CircuitData[index].node2 > *numNodes)
                *numNodes = *CircuitData[index].node2;

            numEl++;
            index++;
        }
    }

    fclose(data);
}

これが MyData.h です

#ifndef MYDATA_H_
#define MYDATA_H_


typedef struct Comp{
    char name[5];   //Name of circuit component
    char node1[5], node2[5];    //2 nodes
    float value[5]; //value
}ComponentType;

#endif /* MYDATA_H_ */

どんな助けでも大歓迎です。コードは他にもありますが、これが最も重要な部分だと思います。

4

1 に答える 1