-1

たくさんのエラーが発生し続けます:

  1. 引数 1 の型エラー
  2. 以前に宣言された「getStudentData」の再宣言
  3. 「(不完全な) 構造体スタッドネット」の不明なフィールド「fname」。

どんなフィードバックでも感謝します。ありがとう

#include <stdio.h>
#include <stdlib.h>

struct student{
    char fname[21];
    char lname[21];
    float gpa;
} str;

int getStudentData(struct studnet *current_ptr); // struct function format 

int main(void){
    struct student str;
    getStudentData(str);

    printf("Last Name: %s\n First Name: %s\n GPA: %.2f\n", str.fname, str.lname, str.gpa);
    return 0;
}

int getStudentData(struct studnet *current_ptr){

    FILE *studentFile; // declaring a pointer file variable

    studentFile = fopen("StudnetData.txt", "r"); // format for fopen; file-variable = fopen(file_name, mode);

    if ( studentFile == NULL){ 
        printf("Error: Unable to open StudnetData.txt file\n"); //test for error
    }
    else {
        fscan(studentFile, "%20s %20s has a GPA of %f\n"
                , current_ptr->fname, current_ptr->lname, current_ptr->gpa);
        // fscanf(file, format, &parameter-1, ...) 

        fclose(studentFile); // The function fclose will close the file. 
    }
    return 0;
}
4

2 に答える 2

1
int getStudentData(struct studnet *current_ptr)
                          ^^^^^^^

struct studentの代わりに意味しましたstruct studnet。スタッドのウェブは必要ありませんよね?

getStudentData(str);

また、これは

getStudentData(&str);

渡された構造体を変更しているため、そのためには、それへのポインターが必要です (関数プロトタイプで正しく宣言されています)。

さらに、さらに別のタイプミスがあります:

fscan(studentFile, "%20s %20s has a GPA of %f\n"

関数の名前はfscanf()ではなくfscan()です。

私が見つけた最後のエラー:

fscanf(..., current_ptr->fname, current_ptr->lname, current_ptr->gpa)
                                                    ^^^^^^^^^^^^^^^^

gpaメンバーへのポインターを渡さないでください&current_ptr->gpa

于 2013-03-17T17:33:04.283 に答える
0

私のコンパイラは次の出力をプッシュします。

blah.c:10:27: warning: declaration of 'struct studnet' will not be visible outside of this function [-Wvisibility]
int getStudentData(struct studnet *current_ptr); // struct function format 
                          ^
blah.c:14:20: error: passing 'struct student' to parameter of incompatible type 'struct studnet *'
    getStudentData(str);
                   ^~~
blah.c:10:36: note: passing argument to parameter 'current_ptr' here
int getStudentData(struct studnet *current_ptr); // struct function format 
                                   ^
blah.c:20:27: warning: declaration of 'struct studnet' will not be visible outside of this function [-Wvisibility]
int getStudentData(struct studnet *current_ptr){
                          ^
blah.c:20:5: error: conflicting types for 'getStudentData'
int getStudentData(struct studnet *current_ptr){
    ^
blah.c:10:5: note: previous declaration is here
int getStudentData(struct studnet *current_ptr); // struct function format 
    ^
blah.c:30:9: warning: implicit declaration of function 'fscan' is invalid in C99 [-Wimplicit-function-declaration]
        fscan(studentFile, "%20s %20s has a GPA of %f\n"
        ^
blah.c:31:30: error: incomplete definition of type 'struct studnet'
                , current_ptr->fname, current_ptr->lname, current_ptr->gpa);
                  ~~~~~~~~~~~^
blah.c:20:27: note: forward declaration of 'struct studnet'
int getStudentData(struct studnet *current_ptr){

これらの警告とエラーを分類してみましょう。

多くの警告は、スペルミスによるstudentものstudnetです。たとえば、これは次のとおりです。

blah.c:31:30: error: incomplete definition of type 'struct studnet'
                , current_ptr->fname, current_ptr->lname, current_ptr->gpa);
                  ~~~~~~~~~~~^

また、値によるスタクトの代わりにポインターを渡す必要があります。行を に変更するgetStudentData(&str);と、次のエラーに役立ちます。

blah.c:14:20: error: passing 'struct student' to parameter of incompatible type 'struct studnet *'
    getStudentData(str);
                   ^~~

そして最後に、あなたが望んfscanfでいたのではなくfscan、このエラーを修正すると思います:

blah.c:30:9: warning: implicit declaration of function 'fscan' is invalid in C99 [-Wimplicit-function-declaration]
        fscan(studentFile, "%20s %20s has a GPA of %f\n"
        ^

この次のエラーに対する警告はありません (ただし、fscanf エラーのため)。ただし、上記のエラーを修正すると、修正が必要な警告がもう 1 つ表示されます。&current_ptr->gpaこれは、の代わりに渡すことで実行できますcurrent_ptr->gpa

blah.c:31:59: warning: format specifies type 'float *' but the argument has type 'double' [-Wformat]
                , current_ptr->fname, current_ptr->lname, current_ptr->gpa);
                                                          ^~~~~~~~~~~~~~~~
于 2013-03-17T17:34:43.783 に答える