Как я могу проверить, содержит ли строка, которую я читаю из .c файла, # include <something>? - PullRequest
0 голосов
/ 21 февраля 2019

У меня проблема с заданием.Я делаю различные упражнения в C (я не могу включить какие-либо библиотеки c ++).

Я должен прочитать из файла .c и вывести все в .o файле, решая также эту спецификацию.

"Строка, начинающаяся с #include« filename.h », должна быть заменена всем содержимым файла с именем filename.h."

void writefile(int size, int *data, *file_path) {

    char outputFile[30];
    if (strcmp(file_name, "string_functions.c") == 0) {
        outputFile = "CW1_test_files/string_functions.o";
    }
    else outputFile = "CW1_test_files/math_functions.o";
    FILE *file;
    file = fopen(outputFile, "w");

    //In questo modo andiamo a verificare se e' opportuno ignorare o meno i commenti.
    int numberOfLines = 0;
    int numberOfComments = 0;

    if (file == NULL) {
        printf("Could not open file %s", filename);
        return -1;
    }
    else {
        char *line[1000];
        char *include = "#include";
        char *define = "#define";
        char ch;
        // file is equals to fp1
        while ((ch = fget(file)) != EOF){
            if ((strcmp(line[i], " ") != 0) && (strcmp(line[i], "\n") != 0) && (strcmp(line[i], "\t") != 0)) numberOfLines++;
            if (strcmp(line[i], "/") = 0) && (strcmp(line[i + 1], "/") numberOfComments++; //check the comments
            else if ((strcmp(line[i], "/") != 0) && (strcmp(line[i], " ") != 0)) continue;


        }

        printf(strcat("Number of Comments in the file %s: %d", file_path, numberOfComments));
        printf(strcat("Number of non-empty lines in the file %s: %d", file_path, numberOfLines));



    }



    fclose(file);

    //svolgere qui il resto del programma
    //stampare il file,, gestire gli #incl
    for (int i = 0; i < size; i++) {


    }
    writefile(size, data);
}

1 Ответ

0 голосов
/ 21 февраля 2019

Стандарт C указывает, что директивная строка имеет эту форму.

<maybe spaces> # <maybe spaces> DIRECTIVE-NAME .....

Прежде чем проверять это, вам также необходимо вырезать '\ NEWLINE'.Чтобы ваша обработка соответствовала C, чтобы можно было обрабатывать любой допустимый файл.

Поэтому вам также нужно пропустить пробелы до и после # в вашем коде и удалить \\\n.

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