C - программа проверяет только первое слово в файле

С новичком здесь. Какие-либо предложения? У меня есть файл, содержащий текст, и мне нужно найти все слова, которые можно читать одинаково вперед и назад (палиндромы), например, ротатор, глаз и так далее. Проблема в том, что эта программа проверяет только первое слово в файле. Заранее спасибо.

Это мой код на данный момент:

#include <stdio.h>
#include <string.h>
int main() {
    char buffer[255];
    char one[255];
    char two[255];
    char *fp;
    fp = fopen("duom.txt", "r");
    fgets(buffer, 255, (FILE*)fp);
    sscanf(buffer, "%s", one);

    strcpy(two, one);
    strrev(two);

    if(strcmp(one, two) == 0)
        printf("%s palindrome\n", one);
    else
        printf("%s not palindrome\n", one);

    return 0;
    }

person Ignas Ausiejus    schedule 11.11.2014    source источник


Ответы (2)


Ваш код запустится только один раз, вам нужно поместить основной анализ в цикл while.

Я позволю вам проверить, что нужно зациклить и как проверить следующее слово.

person Joshpbarron    schedule 11.11.2014

Проблема в том, что вам нужно обработать каждое слово в вашем тексте, а вы обрабатываете только одно. Чтобы повторять свою логику для каждого слова в тексте, вам нужен цикл . Я не буду объяснять эту концепцию, так как дал ссылку на нее. Вместо этого я покажу вам, как это сделать:

while (!feof(f)) {                // while there are more characters to be analysed
   fscanf(fp, "%s", one);         // read another word
   strcpy(two, one);              // analyse it
   strrev(two);

   if(strcmp(one, two) == 0)
       printf("%s palindrome\n", one);
   else
       printf("%s not palindrome\n", one);
}

Здесь вы можете найти ссылку на функцию feof, которую я использую . Остальной код такой же, как у вас.

person Paul92    schedule 11.11.2014
comment
это смотрит только на первое слово каждой строки входного файла. Я думаю, что должен быть вложенный цикл, где внешний цикл считывает строку в буфер [], а внутренний цикл проходит через доступные символы в буфере, извлекая каждое последующее слово и проверяя это слово. - person user3629249; 12.11.2014
comment
Спасибо за ваш комментарий. Я не обращал внимания. Однако fscanf можно использовать со спецификатором %s, который считывает слово, игнорируя все пробелы. Я обновил свой ответ. - person Paul92; 12.11.2014