2016-06-04 13 views
-4

Ich habe folgende Datenstruktur:verknüpfte Liste/aus Datei lesen/C++

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

und ich habe die Elemente aus einer Datei mit der Struktur zu lesen:

3 
1 2 
2 2 
4 1 

Die erste Zahl zeigt die Anzahl der Zeilen. schrieb ich die folgende Funktion:

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

Aufruf Funktion:

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

Die Datei gelesen wird, sondern eine Liste wie erwartet ist nicht zu bauen, der Kopf nach dem Lauf dieser Funktion noch 0. Wenn ich schreibe einfach file.open("filename"); alles ist in Ordnung und das Programm läuft ordnungsgemäß und jeder Zeiger zeigt, wo es angezeigt werden soll. Allerdings habe ich versucht, das Programm mit

./progname progname.cpp „Dateinamen“ ohne die Anführungszeichen

und auch zu nennen, aber das Ergebnis ist dasselbe: die Datei gelesen wird, Kopf ist immer 0.

Kann mir jemand erklären, warum gibt es so einen Unterschied?

+0

Es ist, weil ich die Funktion mit head = read (...) aufrufen, und so initialisiert nach dem Rückkehr Kopf Befehl –

Antwort

2

Das Programm wird lesen progname.cpp, weil es als das erste Argument angegeben ist, und was in der ersten Zeile von progname.cpp ist möglicherweise nicht, was als eine Zahl interpretiert werden kann.

Versuchen Sie, die zusätzliches Argument zu entfernen und den Start beachten Sie das Programm wie

./progname "filename" 

Sie auch, dass Sie vor dem Verwenden sie die Anzahl der Argumente überprüfen sollten.

+0

Das war das Problem, danke –