Значение ключа не будет печататься, несмотря на то, что оно используется для сортировки данных и ищет причину? - PullRequest
1 голос
/ 10 мая 2019

В настоящее время я изучаю структуры данных студентов, в частности хэш-карту. Я пытался напечатать мои результаты в конце моей программы с помощью команды printf в основной функции. Несмотря на то, что я использовал эти ключи в предыдущем цикле while, я не могу получить ключи для печати в своей последней части

Я попытался включить функцию insertMap (см. Ниже), используя распечатку, чтобы указать, действительно ли ключ был сохранен и был, так что это не является ошибкой.

     int main (int argc, const char * argv[]) {
    /*Write this function*/
    const char * filename = argv[1];
    struct hashMap ht;
    char * entWord;
    int * oldAt;
    int repAt;
    int i = 0;

    FILE * fp = fopen(filename, "r");

    initMap(&ht, 100);
    while(!feof(fp)){
          entWord = getWord(fp);
        /*  printf("%s \n", entWord);  */
          if(!containsKey(&ht,entWord))
            insertMap(&ht, entWord, 1);
          else{
            oldAt = atMap(&ht, entWord);
            repAt = *oldAt;
            removeKey(&ht, entWord);
            insertMap(&ht, entWord, repAt+1);
          }
          free(entWord);
    }

    for(i = 0; i < ht.tableSize; i++){
      if(ht.table[i] != NULL){
        printf("%s: %d \n",ht.table[i]->key,ht.table[i]->value);
      }
    }

    fclose(fp);
      return 0;
}
 void insertMap (struct hashMap * ht, KeyType k, ValueType v)
 {  /*write this*/
int idx = stringHash1(k) % ht->tableSize;
struct hashLink * hlnk;
struct hashLink * plink;
assert(ht);

if(ht->table[idx] == NULL){
    hlnk = (struct hashLink *) malloc(sizeof(struct hashLink));
    hlnk->value = v;
    hlnk->key = k;
    hlnk->next = NULL;
    ht->table[idx] = hlnk;
    ht->count++;
}

else{
            plink = ht->table[idx];
            hlnk = (struct hashLink *) malloc(sizeof(struct hashLink));
            hlnk->value = v;
            hlnk->key = k;
            hlnk->next = plink->next;
            plink->next = hlnk;
            ht->count++;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...