Как правильно передать FILE между функциями? - PullRequest
0 голосов
/ 07 ноября 2019

Я нашел эту программу сравнения файлов в Интернете, она компилируется и работает отлично. Я пытаюсь нарезать его на куски заголовок / источник, чтобы я мог повторно использовать функцию. Я получаю ошибку в основном драйвере по какой-то причине. На потерянном уже 2 дня. Ненавижу это говорить, но помогите, плз: D

ИНФОРМАЦИЯ: Я использую win 10. Последняя версия CodeBlocks имеет значение.

// THIS IS ORIGINAL CODES
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void compareFiles(FILE*, FILE*);

// Driver Code
int main()
{
    // opening both file in read only mode
    FILE *fp1 = fopen("sssp.debug_out", "r");
    FILE *fp2 = fopen("sssp_temp.out", "r");

    if (fp1 == NULL || fp2 == NULL)
    {
       printf("Error : Files not open");
       exit(0);
    }

    compareFiles(fp1, fp2);

    // closing both file
    fclose(fp1);
    fclose(fp2);
    return 0;
}


void compareFiles(FILE *fp1, FILE *fp2)
{
    // fetching character of two file
    // in two variable ch1 and ch2
    char ch1 = getc(fp1);
    char ch2 = getc(fp2);

    // error keeps track of number of errors
    // pos keeps track of position of errors
    // line keeps track of error line
    int error = 0, pos = 0, line = 1;

    // iterate loop till end of file
    while (ch1 != EOF && ch2 != EOF)
    {
        pos++;

        // if both variable encounters new
        // line then line variable is incremented
        // and pos variable is set to 0
        if (ch1 == '\n' && ch2 == '\n')
        {
            line++;
            pos = 0;
        }

        // if fetched data is not equal then
        // error is incremented
        if (ch1 != ch2)
        {
            error++;
            printf("Line Number : %d \tError"
               " Position : %d \n", line, pos);
        }

        // fetching character until end of file
        ch1 = getc(fp1);
        ch2 = getc(fp2);
    }

    printf("Total Errors : %d\t", error);
}

Я копирую прототип функции и вставляю в заголовок,это работает до сих пор. Затем я копирую тело и делаю его исходным кодом. Выдает ошибку, говоря «неопределенная ссылка», при вызове функции в главном шутке введите описание изображения здесь ction.

//MAIN FUNCTION
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "compareFiles.h"


// Driver Code
int main()
{
    // opening both file in read only mode
    FILE *fp1 = fopen("sssp.debug_out", "r");
    FILE *fp2 = fopen("sssp_temp.out", "r");

    if (fp1 == NULL || fp2 == NULL)
    {
       printf("Error : Files not open");
       exit(0);
    }
    //THIS IS WHERE IT ERROR OUT
    compareFiles(fp1, fp2);

    // closing both file
    fclose(fp1);
    fclose(fp2);
    return 0;
}

ФАЙЛ ГОЛОВКИ

#ifndef COMPAREFILES_H_INCLUDED
#define COMPAREFILES_H_INCLUDED

void compareFiles(FILE*, FILE*);

#endif // COMPAREFILES_H_INCLUDED

ТЕЛО

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "compareFiles.h"


void compareFiles(FILE *fp1, FILE *fp2)
{
    // fetching character of two file
    // in two variable ch1 and ch2
    char ch1 = getc(fp1);
    char ch2 = getc(fp2);

    // error keeps track of number of errors
    // pos keeps track of position of errors
    // line keeps track of error line
    int error = 0, pos = 0, line = 1;

    // iterate loop till end of file
    while (ch1 != EOF && ch2 != EOF)
    {
        pos++;

        // if both variable encounters new
        // line then line variable is incremented
        // and pos variable is set to 0
        if (ch1 == '\n' && ch2 == '\n')
        {
            line++;
            pos = 0;
        }

        // if fetched data is not equal then
        // error is incremented
        if (ch1 != ch2)
        {
            error++;
            printf("Line Number : %d \tError"
               " Position : %d \n", line, pos);
        }

        // fetching character until end of file
        ch1 = getc(fp1);
        ch2 = getc(fp2);
    }

    printf("Total Errors : %d\t", error);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...