Bekomme Prog nicht zum laufen



  • Hi ich habe folgendes Programm und bekomme es einfach nicht zum laufen.

    #include <stdio.h>
    #include <string.h>
    #define getch() getc(stdin)
    #define ungetch(c) ungetc(c, stdin)
    
    #define MAXWORD 30
    #define MAXWOERTER 1000
    #define TRENNZEICHEN '1'
    
    int lies_wort();
    int suche_wort(char* adresse_von_wort);
    int neues_wort(char* adresse_von_wort);
    int trennzeichen(int zeichen);
    
    char* woerterbuch[MAXWOERTER];
    int wortnummer = 0;
    
    int main() 
    {
    	int i;
    	int adresse_von_wort=0;
    
    	printf("Unterschiedliche Woerter zaehlen\n");
    	printf("Eingabe beenden mit \"RETURN\"\n");
    
    	while ((adresse_von_wort = lies_wort()) != -1) 
    {
    		if (adresse_von_wort) {
    			if (!suche_wort((char*)adresse_von_wort))
    				neues_wort((char*) adresse_von_wort);
    
    }
    	}
    
    	/* wörterbuch ausgeben */
    	printf("\nAnzahl unterschiedlicher Woerter: %i\n",wortnummer);
    
    	for (i=0;i<wortnummer;i++)
    		printf("Woerterbuch[%i]: %s \n",i,woerterbuch[i]);
    
    	return (0);
    }
    
    int lies_wort() 
    {
    	char* zeichen_von_wort;
    	char* wort = zeichen_von_wort;
    	int lim = MAXWORD;
    
    	int zeichen, t;
    	int adresse_von_wort;
    
    	if (trennzeichen(zeichen = *zeichen_von_wort++ = getch()) != TRENNZEICHEN) 
    {
    		if (zeichen == '\n')
    				return (-1);
    		*zeichen_von_wort = '\0';
    		return(0);
    	}
    
    	while (--lim > 0) {
    		t = trennzeichen(zeichen= *zeichen_von_wort++ = getch());
    		if (t != TRENNZEICHEN) 
                      {
    			ungetch(zeichen);
    			break;
    		}
    	}
    	*(zeichen_von_wort-1) = '\0';
    	adresse_von_wort = (int) malloc(strlen(wort)+1);
    	strcpy(((char *)adresse_von_wort), wort);
    	return(adresse_von_wort);
    }
    
    int suche_wort(char* adresse_von_wort) 
             {
    	int i=0;
    	for(i=0;i<wortnummer;i++) 
    		if (!strcmp(adresse_von_wort, woerterbuch[i]))
    			return (1);
    	return (0);
             }
    
    int neues_wort(char* adresse_von_wort) 
             {
    	woerterbuch[wortnummer++] = adresse_von_wort;
    	return (0);
             }
    
    int trennzeichen(int zeichen) 
    {
    	switch (zeichen) 
             {
    		case '.'	: ;
    		case ','	: ;
    		case ';'	: ;
    		case ' '	: ;
    		case '\n'	:	return (zeichen);
    								break;
    		default		:	return (TRENNZEICHEN);
    	}
    }
    


  • 1. Bitte code-Tags auch wieder zumachen, so kanns ja keiner Lesen
    2. was funktioniert denn nicht? (Fehlermeldungen beim Compilieren etc. bitte posten)
    3. das scheint reiner C-Code zu sein, eigentlich wuerde das ins C-Forum gehoeren 😉



  • Hi,
    ich bekomme folgenden Fehler:

    error C3861: 'malloc': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden

    Gruß Stefan



  • swagner3 schrieb:

    error C3861: 'malloc': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden

    #include <stdlib.h>
    vergessen?



  • @net

    habe mal #include <stdlib.h>
    einegbunden.
    Jetzt bekomme ich folgenden Fehler: Run-Time Check Failure #3 - The variable 'zeichen_von_wort' is being used without being defined.

    Gruß Stefan



  • habs jetzt nur mal überflogen.

    meinst du das wirklich so?:

    char* zeichen_von_wort; 
    char* wort = zeichen_von_wort;
    

    einen zeiger auf einen leeren zeiger?



  • swagner3 schrieb:

    Jetzt bekomme ich folgenden Fehler: Run-Time Check Failure #3 - The variable 'zeichen_von_wort' is being used without being defined.

    das liegt wohl daran:

    int lies_wort() 
    { 
       char* zeichen_von_wort; 
       char* wort = zeichen_von_wort;
    ...
    

    'zeichen_von_wort' hat keinen bestimmten wert. musste irgendwie initialisieren



  • Wie kann ich denn zeichen_von_wort initialisieren.
    Oder wie kann ich das besser loesen?

    Gruß Stefan



  • char zeichen_von_wort; 
    char* wort = zeichen_von_wort;
    


  • enno-tyrant schrieb:

    char zeichen_von_wort; 
    char* wort = zeichen_von_wort;
    

    das beisst sich aber mit dem rest vom code. da ist noch mehr faul



  • Das funzt auch nicht.

    Gruß Stefan



  • Ist noch jemand da ? 😕

    Gruß Stefan



  • swagner3 schrieb:

    Wie kann ich denn zeichen_von_wort initialisieren.

    Ausreichend Speicher reservieren? 😕

    Und überarbeite nochmal deinen Code, so Sachen wie

    if (trennzeichen(zeichen = *zeichen_von_wort++ = getch()) != TRENNZEICHEN)
    

    sind nicht gerade toll.



  • Hat keiner ne Lösung für mein Problem ?

    Gruß Stefan :p 🙄 😮 🕶 😉 😃 🙂



  • Neu schreiben bzw. den Code ueberarbeiten waer mein Tipp 😉



  • Wie kann ich denn ausreichend Speicher reservieren ? 😕

    Gruß Stefan



  • in C mit malloc, in C++ mit new[]



  • @Blue-Tiger

    kannst Du mal ein beispiel code posten für malloc?

    Gruß stefan



  • Leider nein, von malloc hab ich keine Ahnung... bin purer C++'ler 😉

    BTW: ich unterstell dir jetzt einfach mal, dass du den Code, den du gepostet hast, selbst gar nicht verstehst. Du solltest vielleicht erstmal versuchen, den Code soweit zu verstehen, dass du ihn auch eigenstaendig aendern kannst. Wir helfen Anfaengern gerne, aber ich hab irgendwie den Eindruck, als ob du dich da an etwas rangewagt hast, dass "zu gross" fuer dich ist... (Disclaimer: soll keine Beleidigung sein, ist nur mein persoenlicher Eindruck)



  • so wie ich das sehe soll 'zeichen_von_wort' ein vom user eingegebener buchstabe sein.

    das initialisiere es so:

    char zeichen_von_wort = getch();
    

    //edit aber wie die anderen schon erwähnten: überarbeite den _gesamten_ code; sonst kommst du aus dem fragen nicht mehr raus


Anmelden zum Antworten