Прочитайте текстовый файл и увеличивайте переменную каждый раз, когда встречается знак равенства - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь написать программу, которая будет читать make-файл и увеличивать счетчик каждый раз, когда в файле встречается знак равенства "=".Вот моя попытка создать такую ​​программу (инкремент - не единственная цель этой программы, это просто точка, в которой я сейчас застрял):

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdarg.h>
#include <stdbool.h>

struct VarMap {
    int data;
    int key;
};

// Use a hash table to store the variables - variablename : definition
void processFile(FILE* spData) {

    int varCount = 0;
    char buffer[1000];
    while (fgets(buffer , sizeof(buffer) , spData) != NULL) {
        if (buffer[0] == '#') continue;
        for (int i = 0; i != '\0' ; i++) {
            if (buffer[i] == '=') {
                varCount++;
                continue;
            }
        }
    }
    printf ("varCount has counted %d equals signs.\n\n" , varCount);

    // This will hold the variables
    struct VarMap variables[varCount];


}

int main(int argc, const char * argv[]) {

    char filepath[1000];
    printf("Enter the filepath of the Bakefile or bakefile: ");
    scanf("%s" , filepath);
    FILE* spData = fopen(filepath , "r");
    if (spData == NULL) {
        printf ("Cannot open file.");
        exit(EXIT_FAILURE);
    }
    processFile(spData);

    fclose(spData);
    return 0;
}

Функция, которая нас интересуетявляется processFile функцией.Мой ход рассуждений состоял в том, чтобы построчно прочитать файл в массив буфер , а затем проанализировать массив, пока не будет найден первый знак равенства, при котором я буду увеличивать varCount и continue на следующую строку.Затем я могу использовать эту переменную для инициализации таблицы ключей для хранения пар значений, соответствующих именам переменных и их содержимому.

Моя проблема заключается в том, что программа, как написано, последовательно возвращает 0 знаков равенства, всякий раз, когда я запускаю его и вводю файл со следующим содержимым (очевидно, существуют знаки равенства, но они не подобраны):

calcmarks : calcmarks.o globals.o readmarks.o correlation.o
    cc -std=c99 -Wall -pedantic -Werror -o calcmarks \
        calcmarks.o globals.o readmarks.o correlation.o -lm


calcmarks.o : calcmarks.c calcmarks.h
    cc -std=c99 -Wall -pedantic -Werror -c calcmarks.c

globals.o : globals.c calcmarks.h
    cc -std=c99 -Wall -pedantic -Werror -c globals.c

readmarks.o : readmarks.c calcmarks.h
    cc -std=c99 -Wall -pedantic -Werror -c readmarks.c

correlation.o : correlation.c calcmarks.h
    cc -std=c99 -Wall -pedantic -Werror -c correlation.c

clean:
    rm -f *.o calcmarks

Как вы уже догадались, я пытаюсьнаписать реализацию на C для программы, которая может обрабатывать Makefile!К сожалению, нелегкая работа.

Так что мой вопрос:

Что я делаю неправильно / отсутствует, что препятствует увеличению varCount?

1 Ответ

0 голосов
/ 24 сентября 2018

Условие проверки для цикла должно быть:

buffer[i] != '\0'

Спасибо @achal за указание на это.

...