链表/从文件中读取/ c ++

时间:2016-06-04 14:10:33

标签: c++ file pointers linked-list ifstream

我有以下数据结构:

struct Domino{
    int numb1; 
    int numb2;
    bool used;
    Domino* next;
};

我必须从具有以下结构的文件中读取元素:

3  
1 2 
2 2 
4 1

第一个数字显示行数。 我写了以下函数:

    Domino* read(char* filename, Domino* head){ 
    std::ifstream file;
    int first=0,line=0, numb, prev_numb, cnt=1;
   file.open(filename, std::ios_base::in);
    if(!file){
        std::cout<<"File cant be opened"<<std::endl;
        return 0;
    }

    while(file>>numb){
        if(line==0){
            line++;
        }else{
        if(cnt%2!=0){
            prev_numb=numb;
            cnt++;
        }else{
            Domino* stone=new DominoListe;
            stone->numb1=prev_numb;
            stone->numb2=numb;
            stone->used=false;
            if(head==NULL){
                head=stone; //first element in the list
            }else{
                Domino* tmp=head;
                while(tmp->next!=NULL){
                    tmp=tmp->next; //The End of the list is found
                }
                tmp->next=stone; // Append at the End
                        }
            stone->next=NULL;
            if(first==0){
                head=stone;
                first++;
            }
            cnt++;
    }}}
    file.close();
    std::cout<<"File is read.\n"<<std::endl;
    return head;
    }

通话功能:

int main(int argc, char * argv[]) { // noch mit const!
Domino* head=NULL;
head=read(argv[1], head);
...

文件被读取但是列表没有按预期构建,头部在此函数运行之后仍为0.当我写简单时 file.open("filename"); 一切正常,程序运行正常,每个指针都显示它应该显示的位置。 但是,我试图用

调用该程序
  

./ progname progname.cpp&#34; filename&#34;

并且没有引号,但结果相同 - 读取文件,head始终为0.

有人可以解释一下为什么会有这样的差异吗?

1 个答案:

答案 0 :(得分:2)

该程序将读取progname.cpp,因为它被指定为第一个参数,而progname.cpp的第一行中的内容可能不是可以解释为数字的内容。

尝试删除额外参数并启动程序,如

./progname "filename"

另请注意,在使用之前应检查参数的数量。