2015-08-19 4 views
-1

Я застрял на этом какое-то время, может ли кто-нибудь помочь? мой код связанного списка отлично работает для целого числа, но, похоже, не работает для строк, он только печатает последнюю запись, любую идею? ThanksСтрока Связанный список только печать последнего ввода

#include<stdlib.h> 
#include<stdio.h> 
#include "node.h" 
#include <string.h> 

typedef struct node { 
    char* val; 
    struct node* next; 
}node; 

int main(){ 

// read text file 
FILE * fp; 
fp = fopen ("dict.txt", "r"); 

// linked list 

char i[10]; 

node* head = malloc(sizeof(node)); 
node* cursr=head; 

while (fscanf(fp, "%s", i) !=EOF) 
{ 
    fscanf(fp, "%s", i); 
    //strcpy(cursr -> val,i); 
    cursr -> val = i; 
    printf("Read String1 |%s|\n", cursr->val); 
    node* newnode = malloc(sizeof(node)); 
    cursr -> next = newnode; 
    cursr = newnode; 
} 

cursr->next = NULL; 
cursr=head; 

while (cursr -> next != NULL) 
{ 
    printf("%s",cursr->val); 
    cursr = cursr -> next; 
} 

} 
+1

Почему вы комментировали '// strcpy (cursr -> val, i);' out? Я предполагаю, что эта линия исправит вашу проблему. Предполагая, конечно, что 'cursr-> val' имеет выделенное пространство. – Kninnug

+0

@Kninnug, который он пытался назначить в следующей строке. Он должен использовать 'strcpy'. – ameyCU

+2

Предполагая, что '' член '' '' '' '' '' '' '' '' 'потому что вы выбрали по какой-то причине, чтобы не включать определение' node'), рассмотрите это: я вам * не * понимаю, что 'cursr-> val = i; 'просто хранит адрес буфера' i [] 'в элементе указателя' val' узла, и, таким образом, * каждый * узел в вашем списке, после его создания, имеет «val», указывающий на тот же i [ ] ', вам может потребоваться просмотреть, как работают указатели в C. – WhozCraig

ответ

1

попробуйте это. он должен работать.

#include<stdlib.h> 
#include<stdio.h> 
//#include "node.h" 
#include <string.h> 

typedef struct node { 
    //char* val; 
    char val[10]; 
    struct node* next; 
}node; 

int main(){ 

// read text file 
FILE * fp; 
fp = fopen ("dict.txt", "r"); 

// linked list 

char i[10]; 
//int i; 

node* head = malloc(sizeof(node)); 
node* cursr= head; 

while (fscanf(fp, "%s", i) !=EOF) 
{ 
    //fscanf(fp, "%s", i); 
    strcpy(cursr -> val,i); 
    //cursr -> val = i; 
    printf("Read String1 |%s|\n", cursr->val); 
    node* newnode = malloc(sizeof(node)); 
    cursr -> next = newnode; 
    //cursr = newnode; 
    cursr = newnode; 
} 

cursr->next = NULL; 
cursr=head; 

while (cursr -> next != NULL) 
{ 
    printf("%s",cursr->val); 
    cursr = cursr -> next; 
} 

} 
Смежные вопросы