仔细阅读文本文件,并在每次遇到等号时递增变量

时间:2018-09-24 05:12:21

标签: c variables text-files increment

我正在尝试编写一个程序,该程序将读取一个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递增?

1 个答案:

答案 0 :(得分:1)

for循环的测试条件应为:

buffer[i] != '\0'

感谢@achal指出来。