我正在尝试编写一个程序,该程序将读取一个makefile文件,并在文件中每次遇到等号“ =”时增加一个计数器。这是我对这样一个程序的尝试(递增并不是该程序的唯一目的,它恰好是我目前遇到的问题):
#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 函数。我的推理流程是将文件逐行读取到数组 buffer 中,然后解析该数组,直到找到第一个等号为止,在该处我将递增 varCount < / em>和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递增?
答案 0 :(得分:1)
for循环的测试条件应为:
buffer[i] != '\0'
感谢@achal指出来。