Unbehandelte Ausnahme bei 0x771715de
-
Hallo Leute,
ich hab ne Frage. Ich bin noch in den absoluten Grundzuegen der C-Programmierung. Nun moechte ich, wie viele vorher sicher auch schon dieses Prgramm Woerterraten erstellen
Nun habe ich u.a. folgendes Problem. Mit meiner Methode kann man soweit ohne Probleme den ersten Buchstaben abfragen.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <conio.h> #include <windows.h> #include "privHead.h" #include "typDef.h" typ_proto *listanf=0, *listend=0, *listakt=0; /*globale zeiger*/ #define BUF 255 char temp[BUF]; char puffer[BUF]; char *getsline_number(int n, FILE *file) { int i; for(i = 0; i < n-1; i++) if(fgets(temp, BUF, file) == NULL) /* Bis zur n-ten Zeile lesen */ return NULL; /* Zeile scheint nicht zu existieren. */ /* Stream ist jetzt in der n-ten Zeile. */ if(fgets(puffer,BUF,file) == NULL) return NULL; /* Zeile scheint nicht zu existieren. */ return puffer; /* Zeile an Aufrufer zurückgeben */ } /*################# MAIN ####################*/ int main (void) { char wortliste[20]; char protokoll[20]; char abfrage[2]; char linenr[20]; printf ("Wortliste eingeben: "); scanf("%s", wortliste); // printf ("Protokolldatei eingeben: "); // scanf("%s", protokoll); // printf("Grossschreibung beachten? [j/n]" ); // scanf("%s", abfrage); // printf("%s\n", wortliste); // printf("%s\n", protokoll); // printf("%s\n", abfrage); lesedatei (wortliste); printf("\n\n\nTest"); fflush(stdin); getchar(); return 0; } /*################# Datei lesen ####################*/ int lesedatei( char *wortliste) { int i=0; FILE *fptr_eing; char *wort; unsigned int line=0; char *linenr; time_t t; time(&t); srand((unsigned int)t); //initial. Zufallszahl //Datei einlesen fptr_eing = fopen(wortliste,"r"); if( (fptr_eing=fopen(wortliste, "r") ) ==NULL ) { fehlerbehandlung( -1, "lesedatei"); return -1; } // fscanf (fptr_eing, "%100c", wort); // wort[125]='\0'; //Wort aus Datei auslesen und ausgeben line=rand()%9+1; wort=getsline_number(line, fptr_eing); printf("\nDatei: %s\n", wortliste); printf("\n\n"); printf("Wort: %s", wort); umwandeln(wort); //listakt=listanf; fclose(fptr_eing); printf("\n");printf(" *"); printf(" Datei eingelesen."); return 0; } /*################# Zeichen in "---" ausgeben ####################*/ int umwandeln(char *wort) { char wortneu[25]={0}, *ptr_wortneu=wortneu; int i; size_t laenge; // Laenge des Wortes ermitteln laenge=strlen(wort)-1; // Wort in "---" wandeln for(i=0; i<laenge; i++) { *ptr_wortneu='-'; ptr_wortneu++; } printf("\nWort verdeckt: %s\n\n",wortneu); suche(wort); return 0; } /*################# Buchstaben suchen ####################*/ int suche (char *wort) { fflush (stdin); char buchstabe={0}; char feld2[25]={0}, *ptr_feld2=feld2; char str3[25]={0}, *ptr_wort=str3; char str4[25]={0}, *ptr_str4=str3; int i; size_t laenge=0; // Laenge des Wortes ermitteln laenge=strlen(wort)-1; while(*wort!='\0') { *ptr_wort=*wort; ptr_wort++; wort++; } // Gesuchten Buchstaben abfragen printf("Bitte geben Sie den zu suchenden Buchstaben ein: "); fflush(stdin); buchstabe=getchar(); /* if ((buchstabe <=97 || buchstabe>= 122)&&(buchstabe <=65)||(buchstabe>=90) ) { printf ("Bitte einen Buchstaben eingeben\n"); return 0; } */ // Nach Buchstaben im Wort suchen for(i=0; i<laenge; i++) { if (*ptr_str4==buchstabe) { *ptr_feld2=buchstabe; ptr_feld2++; } else { *ptr_feld2='-'; ptr_feld2++; } ptr_str4++; } // Wort mit gefundenem Buchstaben ausgeben printf("\nNeuer Text: %s\n",feld2); printf("\nNeuer Text2: %s\n", str3); printf("\n"); int ret = strcmp(feld2, str3); if (ret!=0){suche(wort);} return 0; } /* int schreibedatei(char *wortliste){ //typ_buch *hilf=listakt; /*FILE Datentyp aus stdio.h //FILE *fptr_ausg; /*zeiger auf datentraeger if(listanf==0)return 0; /*list leer, nicht schreiben if((fptr_ausg=fopen(datei, "w"))==NULL){ fehlerbehandlung( -2, "schreibedatei"); return -1; /*w fuer schreiben, test } listakt=listanf; while(listakt!=0){ list2struct(); fwrite((char*)&buch, sizeof(buch), 1, fptr_ausg); listakt=listakt->danach; } fclose(fptr_ausg); listakt=hilf; printf("\n");printf(" *"); printf(" Datei geschrieben."); return 0; } */ /*################# Fehlerbehandlung ####################*/ void fehlerbehandlung( int fehlernum, char *function) { char fehlermeld[4][60+1]={"Fehler beim Oeffnen der Datei", "Fehler beim Schreiben der Datei", "Fehler beim Lesen der Datei", "Fehler bei Speicheranforderung"}; //clrscr(); fehlernum=-fehlernum-1; if (fehlernum<0 || fehlernum>3){ printf("Falsche Fehlernummer!");return;} printf("\n ");printf(" *"); printf(" %s (Funktion %s)!",fehlermeld[fehlernum], function); perror(function); } /* Standardfehlermeldung SYSTEM perror(Funktion) Fehlernummern fopen -1, fwrite -3, fread -3, malloc -4*/
Wenn ich allerdings die Funktion
int suche (char *wort)
ein zweites Mal durchlaufen lasse, kommt nach der Buchstabenabfrage die Meldung
Unbehandelte Ausnahme bei 0x771715de in beleg_v0.2.exe: 0xC0000005: Access violation.
Ich habe sicher irgendnen grundlegendenn Fehler drin, aber ich tu mich echt schwer
Waere coolio, wenn mir jemand helfen koennte.
Gruss Alex
-
Sehr verworren das Ganze.
In Zeile 214 istwort
nicht mehr daswort
aus Zeile 158, da duwort
in Zeile 177 veränderst.Was du in den Zeilen 173-178 machst erledigt strcpy für dich, ohne den Zeiger wort zu ändern.
Du hast ein mächtiges Problem beim Verständnis von Arrays und Zeiger.
Du kannst das Problem komplett in der Arrayschreibweise lösen (also mit []).Dann noch etwas:
verzichte auf globale Variablen.
Eine Funktion macht eine Sache.lesedatei
, liest die Datei und sollte nichtumwandeln
aufrufen.
umwandeln
sollte nichtsuche
aufrufen.
Rekursion (Aufruf vonsuche
insuche
) macht das Ganze auch nicht einfacher.
srand nur einmal im ganzen Programm aufrufen (am besten in main)