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?
Es ist, weil ich die Funktion mit head = read (...) aufrufen, und so initialisiert nach dem Rückkehr Kopf Befehl –