чтение токенов, неправильно читающих простую строку - c - PullRequest
0 голосов
/ 25 апреля 2018

Я пишу программу, в которой мне нужно читать токен по токену и определять определенные ключевые слова.Одним из этих ключевых слов является «gt», которое обозначает больше, чем.

Я разбил текстовый файл на токены по символам табуляции, перевода строки, пробела и возврата.Буфер - это просто большой массив символов.

 char*  word = strtok(buffer, " \n\t\r");

У меня есть несколько вариантов, чтобы проверить возможные слова.Gt заключается в следующем.Как ни странно, это работает для других ключевых слов и иногда даже для других вхождений «gt».

//gt
        if(strcmp("gt", word) == 0){
            type = GT;
            literal_value = 0;
        }

Однако, это не достигается, несмотря на ввод «gt».Я заметил, что когда я печатаю, это происходит

printf("WORD is %s!\n", word);

PRINTS "!ORD is gt"

Что явно не так.Если ответ очевиден, пожалуйста, дайте мне знать - эта ошибка давно уклоняется от меня!

обновленный фрагмент:

char * word = strtok(buffer, " \n\t\r");

    while (word != NULL){
        printf("word is %s!\n", sections);     //PRINTS "!ORD is gt"

        if(sections[0] == ';'){
            break;              //comment indicated by ';'
        }

        //gt
        if(strcmp("gt", word) == 0){
            type = GT;
            literal_value = 0;
        }
          //...............
         //other comparisons for less than, equal to

        process(&curr, output_file);   //function to process current token
        word = strtok(NULL, " \n\t\r");
        }

1 Ответ

0 голосов
/ 25 апреля 2018

Частичный ответ.

Причина, по которой вы получаете вывод, состоит в том, что у вас есть файл .txt типа ms-dos (или windows), в котором есть два символа новой строки.Вы ловите символ перевода строки \ n, но не символ возврата каретки ... поэтому ваша строка %s печатает возврат каретки.Вот почему ! является первым символом в строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...