Crossreferenz die zweite - fehlerbehebung
-
Ich habe ja in einem Threat schon über mein Projekt geschrieben, welches ich machen muss (damals wollte ich es noch mit sortierten Arrays machen. Nun ja, ich habe mich jetzt doch für Listen entschieden. Ich soll nämlich eine Crossreferenzliste schreiben. Sie soll alle Worte ausgeben und die jeweilige Zeilennummer, und das ganze sortieren. Da ich es jetzt verstanden habe. Ich hab es geschafft, das er es sortiert. Nur er gibt mir immer Warnungen an, und ich weiß nicht wie ich diese wegbekomme
Hier das Programm:
/* Bibliotheken */ #include<stdio.h> #include<string.h> #include <stdlib.h> /* Struct-Deklaration */ struct zewo { char wort[100]; int zeilenAnzahl; struct Element *next; } *p,*nach,*top,*tmp; /* Prototyping */ struct zewo ab; void insert_into(char *, int); void print_struct(); void cross_reference(char *); /* cross_reference(); - Funktion */ void cross_reference(char *datei) { FILE *f; char zeile[100]; char wort[100]; char abfrage[40]; int n = 0; int zeilenAnzahl = 0; int trennzeichen=1; int maxAnzahl = 0; int k = 0; int l = 0; char c = 0; char *w=wort; printf("----------------------------------------------\n"); if(!(f=fopen(datei,"r"))) { printf("This Data doesnt exist!\n"); return; }else { while(c!=EOF) { c=fgetc(f); if(c=='\n') zeilenAnzahl++; if(c>='A' && c<='Z' || c>='a' && c<='z' || c=='$' || c=='_' || c>='0' && c<='9') { *w=c; w++; trennzeichen=0; } else if(trennzeichen==0) { *w=0; if(strlen(wort)>1) { insert_into(wort, zeilenAnzahl); } w=wort; trennzeichen=1; } } fclose(f); } printf(" ~ cross reference ~ \n"); print_struct(); } /* insert_into(); - Funktion */ void insert_into(char *wort, int zeilenAnzahl) { p=top; nach=top; tmp=(struct zewo *)malloc(sizeof(struct zewo)); strcpy(tmp->wort,wort); tmp->zeilenAnzahl = zeilenAnzahl; if (p==NULL) { top=tmp; top->next=NULL; } else { // richtige Stelle suchen while (p!=NULL && tmp->wort[0]>p->wort[0]) { nach=p; p=p->next; } // am Anfang einfuegen if (p==top) { tmp->next=top; top=tmp; } else { tmp->next=p; nach->next=tmp; } } } /* print_struct(); - Funktion */ void print_struct() { p=top; while(p!=NULL) { printf("%20s |",p->wort); printf("%5d |\n",p->zeilenAnzahl+1); p=p->next; } } int main(int argc, char *argv[]) { int u = 1; char datei[100]; if(argc>1){ for (u=1; u<argc; u++){ strcpy(datei, argv[u]); cross_reference(datei); return 0; } }else{ return 0; } }
Die Warnungen:
crossreferenzprogramm.c: In Funktion »insert_into«: crossreferenzprogramm.c:105: Warnung: Zuweisung von inkompatiblem Zeigertyp crossreferenzprogramm.c:110: Warnung: Zuweisung von inkompatiblem Zeigertyp crossreferenzprogramm.c:115: Warnung: Zuweisung von inkompatiblem Zeigertyp crossreferenzprogramm.c:116: Warnung: Zuweisung von inkompatiblem Zeigertyp crossreferenzprogramm.c: In Funktion »print_struct«: crossreferenzprogramm.c:131: Warnung: Zuweisung von inkompatiblem Zeigertyp
Ich meine alles beachtet zuhaben. ^^
Bekanntlich sehen mehr Augen besser als 2. Zudem seid ihr viel fortgeschrittener als ich
Desweiteren kann mein Programm irgendwie nur txt Datein verarbeiten? C-FIles sind ja eigentlich auch Textdatein, aber er spuckt nichts aus.
-
Hallo,
BraCay1 schrieb:
/* Struct-Deklaration */ struct zewo { char wort[100]; int zeilenAnzahl; struct Element *next; } *p,*nach,*top,*tmp;
Das 'struct Element' muss 'struct zewo' heißen.
Gez. monstermunchkin
-
peinlich xD Danke dir ^^ Das mit dem c-datein funktioniert doch, ich habe nur ganze zeit immer ne leere datei analysiert xD