Чтение из файла и запись в другой файл с использованием strtok и массивов - PullRequest
0 голосов
/ 11 мая 2019

У меня есть проект относительно языка Си, использующий функцию 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]
...