I'm trying to read a c source file for symbols that: are not in a string, are not in a comment.
int main() {
clearInput();
ReadFileToScreen();
return 0; }
Here are my functions:
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);
}
and
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;
}
and
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;
}
It reads files correctly but I can't seem to make the checks fro the comments and strings...