从源文件C中读取字符

时间:2016-12-18 17:16:25

标签: c string file

我正在尝试读取符号的c源文件:不在字符串中,不在注释中。

int main() {
        clearInput();
        ReadFileToScreen();

return 0; }

以下是我的功能:

void ReadFileToScreen()
{
    short i = 0;
    int ret;
    int numChars = 0;
    char inFile[20];
    char *pointerToData;

    printf("Enter input file name: ");
    fgets(inFile, sizeof(inFile), stdin);
    inFile[strcspn(inFile, "\r\n")] = 0;

    while (inFile[i] != '\0')
    {
        i++;
        numChars++;
    }

    pointerToData = ReadFromFile(inFile, numChars);


    ret = readIdentificators(pointerToData);
    printf("%d\nPress Enter to continue", ret);
}

char* ReadFromFile(char *FileName, int numChars)
{
    int i = 0;
    int reached = 0;
    char fileData[100];
    char fileBuffer[10000];
    FILE *fileIn;

    if (FileName[numChars - 1] == 'c' && FileName[numChars - 2] == '.')
    {
        fileIn = fopen(FileName, "r");

        while (fgets(fileData, sizeof(fileData), fileIn) != NULL)
        {
            i = 0;
            while (fileData[i] != '\0')
            {
                fileBuffer[reached] = fileData[i];
                reached++;
                i++;
            }
        }
        fclose(fileIn);
    }
    else
    {
        printf("Wrong input file!\n");
    }

    return fileBuffer;
}

    int readIdentificators(char *InBuffer)
{
    int result = 0;
    int i = 0;
    short flag_singleLine = 0;
    short flag_multiLine = 0;
    short flag_Quote = 0;

    while (InBuffer[i] > 0 && InBuffer[i] <= '~')
        printf("%c", InBuffer[i++]); 

    i = 0;
    while (InBuffer[i] > 0 && InBuffer[i] <= '~')
    {
            if ((InBuffer[i] == '/') && (flag_multiLine == 0))
                if (InBuffer[i + 1] == '*')
                    flag_multiLine = 1;

            if ((InBuffer[i] == '*') && (flag_multiLine == 1))
                if (InBuffer[i + 1] == '/')
                    flag_multiLine = 0;

            if ((InBuffer[i] == '/') && (InBuffer[i + 1] == '/'))
                flag_singleLine = 1;

            if (InBuffer[i] == '\n')
                flag_singleLine = 0;

            if ((InBuffer[i] == '"') && (flag_Quote = 1))
                flag_Quote = 0;

            if ((InBuffer[i] == '"') && (flag_Quote == 0))
                flag_Quote = 1;

            //if ((InBuffer[i] == '"') && (InBuffer[i - 1] == '\\') && (flag_Quote == 1))



            if ((InBuffer[i] >= 'a' && InBuffer[i] <= 'z' ||
                InBuffer[i] >= 'A' && InBuffer[i] <= 'Z' ||
                InBuffer[i] >= '0' && InBuffer[i] <= '9' ||
                InBuffer[i] == '_'
                ) && (flag_multiLine == 0) && (flag_singleLine == 0) && (flag_Quote == 0))
            {
                result++;
            }
        i++;
    }

    return result;
}

它正确读取文件,但我似乎无法对评论和字符串进行检查......

0 个答案:

没有答案