У меня есть проект относительно языка Си, использующий функцию strtok
.Я читаю файл с помощью цикла while, и я постоянно делаю токены в словах из предложений, используя разделители "" (пробел).Когда я читаю файл, если я сталкиваюсь со словами, которые я указал с помощью операторов if в файле A, я должен записать определенные строки в файл B (расширение макропроцессоров).Проблема в том, что всякий раз, когда я пытаюсь прочитать из файла A и, соответственно, записать каждую строку в файле BI, я получаю только последнюю строку из файла A, где мне нужно проверять каждую строку и писать по одной.
while(fgets(str,100,fp) != NULL){
fgets(str,100,fp);
if (str[0] == '@')
{
char *array[300];
char *p = strtok (str," \n");
while (p != NULL) //tokenize the words, and save into array
{
array[i++] = p;
p = strtok (NULL, " ");
}
if (!strcmp(array[0],"@def")) // if the very first word encountered in the line is @def, write the words below into the file B
{
fprintf(fptr2, "define %s %s\n",array[1],array[2]);
} //defining a global variable
else if (!strcmp(array[0],"@mat"))// if the very first word encountered in the line is @mat, write the words below into the file B
{
fprintf(fptr2, "int %s[%s][%s]\n",array[1],array[2],array[3]);
}//defining a 2 dimensional array with dimensions MxN
}
}
Если файл A содержит следующие строки:
@mat A N M
@def N 100
в файл B будет записана только эта строка:
define N 100
, но в нем должно быть
int A[N][M]
define N 100
Точно так же, если файл A содержит следующие строки:
@def N 100
@mat A N M
файл B будет иметь следующую строку:
int A[N][M]
, но этодолжен иметь
define N 100
int A[N][M]