我可能又错过了一些非常简单的东西,但是在实验室里的时间太多了,让我无法看到我在这里做错了什么。我正在尝试通过创建一个列表并在新字符被读入时将新节点附加到该文件直到文件末尾来构建从文件中读入的所有字符的链接列表。
首先介绍一些背景,下面是节点结构的代码:
typedef struct node
{
//each node holds a single character
char data;
//pointer to the next node in the list
struct node *next;
}node;
通过使用几个 printf 语句,我设法将问题缩小到此代码块中的某个位置。
FILE *infile = fopen("data.txt", "r");
int c;
int counter = 0;
node *head, *current = NULL;
//Get the count of our original rules and create the list
do{
node *item = new node();
c = fgetc(infile);
if(c == 'n'){
counter ++;
}
printf("From infile: %c n", c);
item->data = c;
item->next = NULL;
printf("Item data: %c", item->data);
if (head == NULL){
head = current = item;
}
else {
current->next = item;
current = item;
}
}while( c != EOF);
我不确定它在哪里,但我知道它在那里。如果我能得到另一双眼睛来指出哪里出了问题,我将不胜感激。
您不会在此处初始化head
:
node *head, *current = NULL;
因此,它将具有不确定的值,因此很可能此检查失败:
if (head == NULL){
因此,磁头和电流都不会正确初始化。
如果您使用的是 C++11,那么您应该使用 nullptr 而不是 NULL
。