Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 结构,链表,头,空指针,C++;_C++_Pointers_Struct_Null Pointer - Fatal编程技术网

C++ 结构,链表,头,空指针,C++;

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) {

如何定义指针头显示第一个链表元素?编译器在以下位置显示错误:

head=domino->info

首先,我将其定义为空指针,因为链表一开始是空的

  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;
}