Я пытаюсь написать программу, которая будет читать 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?