2015-02-19 2 views
0

Я пытаюсь напечатать уникальные файлы из связанного списка, в основном у меня есть чар * проверка, что я сравниваю с текущим файлом, и если он отличается, то я меняю указатель на новый файл и распечатать его, у меня есть 5 экземпляров в двух уникальных файлах, но когда я запускаю цикл, он печатает 5 файлов (1 файл дважды, а другой файл 3 раза) вместо того, чтобы печатать каждый файл один раз, как я могу это исправить?печать цикла, когда он должен проходить (C)

for (ptr = head; ptr != NULL; ptr = ptr->next){ 
    if(ptr->fileName != check){ 
     check = ptr->fileName; 
     printf("%s\n", check); 
    } 
    else{ 
     continue; 
    } 
} 

ответ

5

В C вы не можете сделать if (str1 != str2). Вы должны использовать функции strcmp().

Вместо

if(ptr->fileName != check){ 

вы бы

if (strcmp(ptr->fileName, check) != 0) { 

strcmp возвращает 0, если строки равны, -1 или 1 в зависимости от того, str1 str2 или больше, чем другие.

+0

Perfect. Спасибо! – FullCombatBeard

+2

ну вы можете сделать str1! = Str2 он просто не делает то, что вы думаете. Что он делает, это увидеть, указывают ли эти два указателя на одно и то же место памяти, а не на то, что они указывают на одни и те же строки – pm100

0

Вы должны хранить файлы, которые были напечатаны в некоторых местах. На каждой итерации вам нужно посмотреть в своем магазине, чтобы увидеть, был ли этот файл уже напечатан или нет.

Рассмотрим последовательность файлов:

  1. File1
  2. file2
  3. File1
  4. File2
  5. File1

Это будет печататься в 5 раз.

Если

  1. File1
  2. File1
  3. File1
  4. File2
  5. File2

Если будет напечатано 2 раза.