我正在尝试读取符号的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;
}
它正确读取文件,但我似乎无法对评论和字符串进行检查......