C++ 结构,链表,头,空指针,C++;
如何定义指针头显示第一个链表元素?编译器在以下位置显示错误: head=domino->info 首先,我将其定义为空指针,因为链表一开始是空的C++ 结构,链表,头,空指针,C++;,c++,pointers,struct,null-pointer,C++,Pointers,Struct,Null Pointer,如何定义指针头显示第一个链表元素?编译器在以下位置显示错误: head=domino->info 首先,我将其定义为空指针,因为链表一开始是空的 struct dominoone* next= NULL; struct dominoone* head=NULL; 然后逐行读取文件中的信息 int readDomino (){ FILE *datei; if((datei=fopen("datei.dat", "r") )==NULL) {
struct dominoone* next= NULL;
struct dominoone* head=NULL;
然后逐行读取文件中的信息
int readDomino (){
FILE *datei;
if((datei=fopen("datei.dat", "r") )==NULL) {
std::cout<<"File can't be opened"<<std::endl;
return 0;
}else {
int beginning;
int temp;
fscanf(datei, "%d", &beginning);
for(int i=0; i<beginning; i++) {
dominoone *domino= new dominoone;
fscanf(datei, "%i", &temp);
domino->info.number1=temp;
fscanf(datei, "%i", &temp);
domino->info.number2=temp;
printf("[%d:%d]", domino->info.number1, domino->info.number2);
domino->next=0;
if(i==1) {
head=domino->info; //The compiler shows mistake here
}
}
}return 0;
}
这段代码中几乎没有错误 首先,无法执行赋值
head=domino->info
,因为左侧和右侧的类型不兼容
其次,在阅读多米诺骨牌列表时,你需要跟踪列表的尾部
所以你需要申报
struct dominoone* tail=NULL;
然后,在填充结构之后,将if(i==1).
替换为
if (i == 0 ) head = domino;
else tail->next = domino;
tail = domino;
readDomino()
函数的最终版本可能如下所示:
int readDomino (){
FILE *datei;
struct dominoone* tail=NULL;
if((datei=fopen("datei.dat", "r") )==NULL) {
std::cout<<"File can't be opened"<<std::endl;
return -1;
}
int list_size;
fscanf(datei, "%d", &list_size);
for(int i=0; i<list_size; i++) {
dominoone *domino= new dominoone;
fscanf(datei, "%i", &domino->info.number1);
fscanf(datei, "%i", &domino->info.number2);
printf("[%d:%d]\n",
domino->info.number1,
domino->info.number2);
domino->next=NULL;
if (i == 0 ) head = domino;
else tail->next = domino;
tail = domino;
}
}
return 0;
}
int-readDomino(){
文件*datei;
结构dominoone*tail=NULL;
if((datei=fopen(“datei.dat”,“r”))==NULL){
std::coutnext=NULL;
如果(i==0)head=domino;
else tail->next=domino;
尾巴=多米诺骨牌;
}
}
返回0;
}
请提供准确的错误消息。head
应该是指向dominone
结构的指针:如果(i==0)head=domino代码>。嗯,head
是一个dominoone*
,domino->info
是一个dominopart
。。。你的意思是domino->next
?“dominopart无法在赋值中转换为dominoone”如果出现编译器错误,程序将无法编译,文件将如何读取?@DianaPapukchieva对我有效。。。用readDomino()的完整列表更新了文章,以供参考。
if (i == 0 ) head = domino;
else tail->next = domino;
tail = domino;
int readDomino (){
FILE *datei;
struct dominoone* tail=NULL;
if((datei=fopen("datei.dat", "r") )==NULL) {
std::cout<<"File can't be opened"<<std::endl;
return -1;
}
int list_size;
fscanf(datei, "%d", &list_size);
for(int i=0; i<list_size; i++) {
dominoone *domino= new dominoone;
fscanf(datei, "%i", &domino->info.number1);
fscanf(datei, "%i", &domino->info.number2);
printf("[%d:%d]\n",
domino->info.number1,
domino->info.number2);
domino->next=NULL;
if (i == 0 ) head = domino;
else tail->next = domino;
tail = domino;
}
}
return 0;
}