# Wort aus einer Datei durch ein anderes ersetzen wie?



## Adi | tmine (20. September 2006)

hi ich versuche seit geraumer Zeit in c ein Wort aus einer Datei zu ändern.
Folgenden Code habe ich im Internet gefunden, nur der funktionier nicht recht:

```
/* search_and_replace.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define STRING_MAX 8192

int wort_begrenzer(char c) {
   return (c == ' ' || c == '\n' || c == '\t' || c == '\0' ||
       c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
 size_t p=strlen(str);
 str[p-1] = '\0';
}

int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
        such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
        *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;

   if(argc < 2) {
      fprintf(stderr, "Verwendung: %s datei\n", *argv);
      return EXIT_FAILURE;
   }
   file = fopen(argv[1],"r");    /* Datei zum Lesen öffnen     */
   copy = fopen(argv[1],"r+");   /* Datei zum Schreiben öffnen */
   if(file == NULL || copy == NULL) {
      printf("Fehler bei fopen()...\n");
      return EXIT_FAILURE;
   }
   alt_string[0]='\0';
   /* Kompletten String in alt_string legen ...  */
   /* Bitte ggf. selbst durch dynamische Speicherverwaltung
     * genügend Platz schaffen! */
   while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
      len += strlen(puffer)+1;
      if(len < STRING_MAX)
         strcat(alt_string, puffer);
      else {
         printf("Puffergroesse ueberschritten!\n");
         break;
      }
   }
   neu_string[0]='\0';

   printf("Welches Wort wollen Sie ersetzen : ");
   fgets(such_wort, STRING_MAX, stdin );
   chomp(such_wort);

   such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
   for(w = 0; w < such_wortlen; w++)
   /* Nach Wortbegrenzern duchlaufen ... */
   if(wort_begrenzer(such_wort[w])) {
      printf("Keine Wortbegrenzer im Suchwort\n");
      return EXIT_FAILURE;
   }
   printf("Durch welches Wort wollen Sie ersetzen : ");
   fgets(replace_wort, STRING_MAX, stdin);
   chomp(replace_wort);
   i = 0;
   while(1){
      if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
         /* Kein Wort zu ersetzen */
         strcat(neu_string, &alt_string[i]);
         break;
      }
      else { /*..ansonsten von Byte i bis zgr in neu_string*/
         strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
         /* Jetzt überprüfen, ob wir ein Wort haben und
          * keinen Teilstring oder das Wort am Anfang steht */
         if( (zgr-&alt_string[0]==0 ||
              wort_begrenzer( *(zgr-1))) &&
              wort_begrenzer( *(zgr+such_wortlen))) {
            strcat(neu_string, replace_wort);
            /* Nach ersetztem Wort den Zeiger setzen ... */
            i += zgr + such_wortlen-&alt_string[i];
         }
         else {
            strncat(neu_string, zgr, 1);
            i += zgr + 1-&alt_string[i];
         }
      }
   } /* Ende while(1) */
   /* Für Testausgabe ... */
   /* printf("Neuer String : %s\n",neu_string); */
   strcpy(alt_string, neu_string);
   /* Achtung jetzt wirds ernst,
    * für Testausgabe in Kommentar setzen*/
   fputs(alt_string, copy);
   neu_string[0] = '\0';
   return EXIT_SUCCESS;
}
```

kann mir jemand sagen was ich alles änder(anpassen) muss damit der leuft? Wäre sehr dankbar.

mfg adi


----------



## CSANecromancer (20. September 2006)

Wohl kaum, wenn du nicht genau sagen kannst, was für Fehler dir der Compiler um die Ohren haut.


----------



## Adi | tmine (20. September 2006)

da ist ja schon das problem es gibt keinen Fehler^^ nur das "skript" hält nirgends an... es öffnet schnell das Fensterchen und schliesst es auch shcon wieder... ohne das man ne datei auswählen , oder wonst was eingeben konnte. darum glaube ich muss man irgendwas dran ändern, nur ich weiss nit was... bin neuling


----------



## Schlubl (20. September 2006)

wäre auch sehr intressiert an dem


----------



## GeHo (20. September 2006)

Weißt du überhaupt ansatzweise, wie das Programm funktioniert?


> int main(int argc, char **argv) {


--> Das Programm erwartet Argumente beim ausführen.



> if(argc < 2) {
> fprintf(stderr, "Verwendung: %s datei\n", *argv);
> return EXIT_FAILURE;
> }


--> Das Programm erwartet genau 1Argument, dass den Dateinamen, der zu untersuchenden Datei, angibt. Ist kein Argument angegeben, dann gibt das Programm ein Hilfe-Text aus und wird beendet. 
Weil kein getchar(); oder SYSTEM("PAUSE"); (nur bei Windows) angegeben ist, verschwindet das Fenster sofort, wenn es nicht aus den Shell geöffent wird. 
Deswegen einfach Programm aus dem Shell öffnen und Dateinamen als Argument angeben.


----------



## CSANecromancer (20. September 2006)

@GeHo:
Hmmm... das erinnert mich daran, daß es mittlerweile tatsächlich so weit ist, daß genug Programmierer (oder angehende Programmierer) unterwegs sind, die nie in den Genuß eines reinen DOS und der Konfigurationsorgien in config.sys (emm386 läßt grüssen) und autoexec.bat gekommen sind.
Also nicht unbedingt jedem sagen die Begriffe "shell" oder "command.com" etwas. Es gibt in der Tat Leute, die nicht wissen, daß man auch schon vor Windows Computer bedienen konnte, einfach weil sie es nicht miterlebt haben. ;-]


----------



## Adi | tmine (20. September 2006)

Danke für eure Antworten. Ich glaube langsam zu wissen in welche Richtung es geht, werde aber noch nicht ganz schlau aus euren Beiträgen.   könnt ihr mir ev. das Ganze ein Bisschen näher erklären?
Wäre voll nett danke schon mal für die bisherige Hilfe.

mfg adi


----------



## Schlubl (20. September 2006)

> if(argc < 2) {
> fprintf(stderr, "Verwendung: %s datei\n", *argv);
> return EXIT_FAILURE;
> }


muss man dan den pfad eingeben oder nur den dateiname?


----------



## Adi | tmine (20. September 2006)

hab ich richtig überlegt wenn ich nun versucht habe das ganze so im cmd (test.exe /test.txt) zu starten? was habe ich falsch gemacht? es kommt nämlich fehler beim fopen


----------



## CSANecromancer (20. September 2006)

Das Programm, was du da ausgegraben hast, ist ein blankes C-Programm. Das kann nichts mit Windows XP, Fenstern, Maus etc. anfangen. Wenn du bei deinem Windows mal auf Start->Ausführen gehst und als auszuführenden Befehl cmd eingibst, dann befindest du dich in der sogenannten DOS-Shell, die selbst in Windows XP noch vorhanden ist.
Alternativ gibt es auch Start->Programme->Zubehör->Eingabeaufforderung oder wo auch immer sich das Teil versteckt.

Dieses komische schwarze Fenster mit dem bißchen weiße Schrift - das ist die DOS-Shell. Und für so eine Shell wurde das Programm auch geschrieben. Wenn du dich mittels "cd" bis zu dem Verzeichnis durchhangelst, in dem das Kompilat deines Programmes liegt und dann die entsprechende .exe-Datei ausführst, dann bekommst du eine entsprechende Rückmeldung von dem Programm und es sagt dir, wie es zu verwenden ist.

Unter reinem Windows passiert das gleiche, nur mit dem winzigen kleinen Zusatz, daß Windows so "schlau" ist und die DOS-Shell nach Abarbeitung des Programms sofort wieder schließt. Exakt das ist dieser Effekt, den du beschrieben hast:


> es öffnet schnell das Fensterchen und schliesst es auch shcon wieder...




Nachtrag:
Ein Fehler beim fopen deutet mit ziemlich hoher Wahrscheinlichkeit darauf hin, daß er die Datei nicht finden kann. Sollte mich auch sehr wundern. Denn "/test.txt" würde _vielleicht_ noch in einem Linux- / Unix-System gefunden werden können, aber nicht unbedingt unter Windows. Lege dir einfach die test.txt im gleichen Verzeichnis an, in dem auch die test.exe liegt. Dann sollte ein cmd "test.exe .\test.txt" Erfolg bringen.


----------



## Adi | tmine (20. September 2006)

ok bis jetzt is mir alles klar nur wie öffne ich das nun richtig? also mit dem argument?

Nachtrag gesehen ^^:
jetzt gehts DANKESCHÖN für die SUPER HILFE


----------



## Schlubl (20. September 2006)

he habs jetzt in der msdos fensterausgeführt doch da kommt nur :

Verwendung: fputs.exe datei


----------



## Adi | tmine (20. September 2006)

du musst z.B. so eingeben: 


```
test.exe /test.txt
```

test.exe für das "prog" und test.txt für das file das du lesen willst


----------



## Schlubl (20. September 2006)

und wie muss es sein wenn es eine headerdatei ist

wie muss das aussehen wenn ich in einer headerdatei etwas überschreiben will?



> if(argc < 2) {
> fprintf(stderr, "Verwendung: %s datei\n", *argv);
> return EXIT_FAILURE;
> }


----------



## Norbert Eder (21. September 2006)

Schlubl: Mit fast 50 Posts solltest du wissen, dass hier Groß- und Kleinschreibung angesagt ist. Dem hast du bei der Account-Erstellung zugesagt und kann in der Netiquette nachgelesen werden (Punkt 15). Bitte daran halten.


----------



## Schlubl (21. September 2006)

Norbert Eder hat gesagt.:
			
		

> Schlubl: Mit fast 50 Posts solltest du wissen, dass hier Groß- und Kleinschreibung angesagt ist. Dem hast du bei der Account-Erstellung zugesagt und kann in der Netiquette nachgelesen werden (Punkt 15). Bitte daran halten.


Ok, aber könnte jetzt jemand mir helfen?

gruss schlubl


----------



## CSANecromancer (21. September 2006)

@Schlubl: Was fehlt denn noch? Wenn du nach dem ganzen Thread immer noch nicht weisst, wie diese Datei zu benutzen ist, dann solltest du dich ein wenig schlau machen in den Punkten Dateisystem und main-Funktion unter C. Ich kann dir auch nicht sagen, wie du jetzt eine include-Datei versaubeuteln kannst, da ich keine Ahnung habe, wo was auf deinem Rechner installiert ist.


----------



## GeHo (21. September 2006)

@Schlubl: Ich denk mal dich verwirrt, dass ich diesen Teil zitiert habe:





> if(argc < 2) {
> fprintf(stderr, "Verwendung: %s datei\n", *argv);
> return EXIT_FAILURE;
> }


Damit wollte ich nicht auf einen Fehler oder eine Änderung, die man im Quellcode vornehmen muss, hinweisen. Der Quellcode, wie er von Anfang an vom Threadersteller gepostet wurde, ist richtig. Das Problem ist, dass ihr die .exe Datei, die nach dem kompilieren entstanden ist, nicht richtig verwendet habt. Du musst den Shell öffnen. Innerhalb der Shell in das Verzeichnis mit der .exe wechseln (die hoffentlich nach dem kompilieren entstanden ist) und dort 'ProgrammName einzuleseneDatei.txt' eingeben (willst du eine Headerdatei einlesen geht das natürlich genauso nur statt dem .txt dann .h).

@CSANecromancer





> lso nicht unbedingt jedem sagen die Begriffe "shell" oder "command.com" etwas. Es gibt in der Tat Leute, die nicht wissen, daß man auch schon vor Windows Computer bedienen konnte, einfach weil sie es nicht miterlebt haben.


Ach Quatsch ich bin mir absolut sicher, dass absolut jeder weiß, was ein Shell ist 
Nee, aber ich dachte es würde sich um c-Anfänger handeln, die im Quellcode über das argc argv gestolpert waren. Annscheinend ging es nur darum ein Programm zu finden, dass Strings in einer Textdatei ersetzen kann. Und nicht darum den Quellcode zu verstehen.


----------



## Schlubl (21. September 2006)

Hallo
Ich hab die Headerdatei(code.h) kompilliert mit dem Programm Dev-C++ und jetzt probierte ich das Programm noch mal doch es steht nur code.exe / code.h

Was habe ich falsch gemacht?


----------



## GeHo (21. September 2006)

Du hast den Quelltext also in eine Datei code.h geschrieben und kompiliert?
c-Quelltexte musst du als .c also 'code.c' abspeichern. Header-Dateien sind für was anderes gedacht. 


> jetzt probierte ich das Programm noch mal doch es steht nur code.exe / code.h


Was heißt du probierst das Programm nochmal? Hast du es über die Konsole gestartet?
Wo steht nur code.exe / code.h?
Was soll das '/' bedeuten?


----------



## Schlubl (21. September 2006)

Schau wenn ich es Im MS-DOS fenster eingebe das Programm das das enthält:
	
	
	



```
/* search_and_replace.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define STRING_MAX 8192

int wort_begrenzer(char c) {
   return (c == ' ' || c == '\n' || c == '\t' || c == '\0' ||
       c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
 size_t p=strlen(str);
 str[p-1] = '\0';
}

int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
        such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
        *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;

   if(argc < 2) {
      fprintf(stderr, "code.exe / code.h", *argv);
      return EXIT_FAILURE;
   }
   file = fopen(argv[1],"r");    /* Datei zum Lesen öffnen     */
   copy = fopen(argv[1],"r+");   /* Datei zum Schreiben öffnen */
   if(file == NULL || copy == NULL) {
      printf("Fehler bei fopen()...\n");
      return EXIT_FAILURE;
   }
   alt_string[0]='\0';
   /* Kompletten String in alt_string legen ...  */
   /* Bitte ggf. selbst durch dynamische Speicherverwaltung
     * genügend Platz schaffen! */
   while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
      len += strlen(puffer)+1;
      if(len < STRING_MAX)
         strcat(alt_string, puffer);
      else {
         printf("Puffergroesse ueberschritten!\n");
         break;
      }
   }
   neu_string[0]='\0';

   printf("Welches Wort wollen Sie ersetzen : ");
   fgets(such_wort, STRING_MAX, stdin );
   chomp(such_wort);

   such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
   for(w = 0; w < such_wortlen; w++)
   /* Nach Wortbegrenzern duchlaufen ... */
   if(wort_begrenzer(such_wort[w])) {
      printf("Keine Wortbegrenzer im Suchwort\n");
      return EXIT_FAILURE;
   }
   printf("Durch welches Wort wollen Sie ersetzen : ");
   fgets(replace_wort, STRING_MAX, stdin);
   chomp(replace_wort);
   i = 0;
   while(1){
      if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
         /* Kein Wort zu ersetzen */
         strcat(neu_string, &alt_string[i]);
         break;
      }
      else { /*..ansonsten von Byte i bis zgr in neu_string*/
         strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
         /* Jetzt überprüfen, ob wir ein Wort haben und
          * keinen Teilstring oder das Wort am Anfang steht */
         if( (zgr-&alt_string[0]==0 ||
              wort_begrenzer( *(zgr-1))) &&
              wort_begrenzer( *(zgr+such_wortlen))) {
            strcat(neu_string, replace_wort);
            /* Nach ersetztem Wort den Zeiger setzen ... */
            i += zgr + such_wortlen-&alt_string[i];
         }
         else {
            strncat(neu_string, zgr, 1);
            i += zgr + 1-&alt_string[i];
         }
      }
   } /* Ende while(1) */
   /* Für Testausgabe ... */
   /* printf("Neuer String : %s\n",neu_string); */
   strcpy(alt_string, neu_string);
   /* Achtung jetzt wirds ernst,
    * für Testausgabe in Kommentar setzen*/
   fputs(alt_string, copy);
   neu_string[0] = '\0';
   return EXIT_SUCCESS;
}
kann mir jemand sagen was ich alles änder(anpassen) muss damit der leuft? Wäre sehr dankbar.
```

Und dann kommt immer code.exe / code.h das ist die Ausgabe die das MS-Dos giebt


----------



## deepthroat (22. September 2006)

Hi.

Wie bereits gaaanz am Anfang und mehrmals festgestellt wurde mußt du ein Argument beim Programmaufruf angeben - und zwar die Datei die du bearbeiten willst.

Was du da in dem Programm herumgepfuscht hast bringt überhaupt nichts. Es ändert doch nur die Ausgabe wenn nicht genau 1 Argument beim Programmaufruf angegeben wurde.

Nochmal zum Mitschreiben: Wenn du das Programm kompiliert hast und es ist im aktuellen Verzeichnis als "code.exe" gespeichert und die willst die Datei "code.h" von dem Programm verarbeiten lassen, dann mußt du am DOS Prompt eingeben: 
	
	
	



```
code.exe code.h
```

Gruß


----------



## Schlubl (22. September 2006)

warum muss ich den das Programm als code.exe speichern

Danke ich hab es jetzt,doch noch etwas.Wie kann man das Programm starten ohne das man es im DOS starten muss,geht das?


----------



## CSANecromancer (22. September 2006)

Naja, nicht so ohne weiteres. DOS und Windows sind nichtg nur von der Bedienung her völlig unterschiedlich sondern auch vom internen Aufbau her. Ganz, *ganz* grob formuliert sieht es so aus:

DOS:
DOS kennt einen Bildschirm und wenn es irgendetwas (Zeichen, Bildchen etc.) ausgeben soll, dann kann DOS das einfach auf dem Bildschirm ausgeben. So simpel das klingt, so simpel funktioniert das. puts(), printf() und dergleichen machen genau das. Die schreiben einfach "Dinge" auf die sogenannte Standardausgabe und das ist unter DOS der Bildschirm.

Windows:
Windows kennt an und für sich keinen Bildschirm. Na gut, irgendwie schon, aber der ist innerhalb der Win API tief vergraben. Die Win API ist hierbei das Stichwort. Das ist eine Art Zwischenschicht, die zwischen einem Programm (wie zum Beispiel eben diesem Testprogramm) und der direkten Hardware (dem Monitor z.B.) steht. Wenn ein Programm unter Windows irgendetwas am Bildschirm anzeigen soll, dann muß sich diese Anzeige mehr oder weniger durch die Win API durcharbeiten. Genau das fehlt dem kleinen Beispielprogramm aus diesem Thread. Deswegen sehen Windowsprogramme auch immer so viel anders aus als DOS-Programme.

Die Eingabeaufforderung / DOS-Shell, die du für die Ausführung benutzt, macht genau das Benötigte: Sie verbindet u.a. den Bildschirm mit der Standardausgabe, so wie es das Miniprogramm kennt. Die DOS Shell empfängt also alle printf() des Programms und kann sie dann in einem entsprechenden Fensterbereich unter Windows darstellen.

Analog sieht es mit Maus und Tastatur aus.

Klar soweit?


----------



## Schlubl (22. September 2006)

Hallo
Ich probiere es gerade in ein Programm einzubauen aber es will einfach nicht.Was soll ich tun


----------



## CSANecromancer (22. September 2006)

Schlubl hat gesagt.:
			
		

> Was soll ich tun


Dir mal ganz schnell angewöhnen, mehr Informationen zu posten.

Ich kann nicht für andere sprechen, aber ich für meinen Teil bin u.a. deswegen Softwareentwickler und kein Supporter, weil ich auf "es geht nicht" nicht reagiere und nicht reagieren *will*. Diese Aussage zeigt nämlich in 99% aller Fälle, daß der "Fragende" einfach zu *faul* ist, sich selbst auch nur ein wenig mit dem Problem auseinander zu setzen und es deswegen nicht genauer formulieren kann.

Wenn aber jemand zu faul ist, für sich selbst zu denken - warum, zum Teufel, sollte ich das für ihn übernehmen?


----------



## Schlubl (23. September 2006)

Also
Ich möchte dies :


```
/* search_and_replace.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define STRING_MAX 8192

int wort_begrenzer(char c) {
return (c == ' ' || c == '\n' || c == '\t' || c == '\0' ||
c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
size_t p=strlen(str);
str[p-1] = '\0';
}

int main(int argc, char **argv) {
FILE *file, *copy;
char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
*zgr;
char puffer[STRING_MAX+1];
int such_wortlen, i=0,w;
size_t len=0;

if(argc < 2) {
fprintf(stderr, "", *argv);
return EXIT_FAILURE;
}
file = fopen(argv[1],"r"); /* Datei zum Lesen öffnen */
copy = fopen(argv[1],"r+"); /* Datei zum Schreiben öffnen */
if(file == NULL || copy == NULL) {
printf("Fehler bei fopen()...\n");
return EXIT_FAILURE;
}
alt_string[0]='\0';
/* Kompletten String in alt_string legen ... */
/* Bitte ggf. selbst durch dynamische Speicherverwaltung
* genügend Platz schaffen! */
while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
len += strlen(puffer)+1;
if(len < STRING_MAX)
strcat(alt_string, puffer);
else {
printf("Puffergroesse ueberschritten!\n");
break;
}
}
neu_string[0]='\0';

printf("Welches Wort wollen Sie ersetzen : ");
fgets(such_wort, STRING_MAX, stdin );
chomp(such_wort);

such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
for(w = 0; w < such_wortlen; w++)
/* Nach Wortbegrenzern duchlaufen ... */
if(wort_begrenzer(such_wort[w])) {
printf("Keine Wortbegrenzer im Suchwort\n");
return EXIT_FAILURE;
}
printf("Durch welches Wort wollen Sie ersetzen : ");
fgets(replace_wort, STRING_MAX, stdin);
chomp(replace_wort);
i = 0;
while(1){
if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
/* Kein Wort zu ersetzen */
strcat(neu_string, &alt_string[i]);
break;
}
else { /*..ansonsten von Byte i bis zgr in neu_string*/
strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
/* Jetzt überprüfen, ob wir ein Wort haben und
* keinen Teilstring oder das Wort am Anfang steht */
if( (zgr-&alt_string[0]==0 ||
wort_begrenzer( *(zgr-1))) &&
wort_begrenzer( *(zgr+such_wortlen))) {
strcat(neu_string, replace_wort);
/* Nach ersetztem Wort den Zeiger setzen ... */
i += zgr + such_wortlen-&alt_string[i];
}
else {
strncat(neu_string, zgr, 1);
i += zgr + 1-&alt_string[i];
}
}
} /* Ende while(1) */
/* Für Testausgabe ... */
/* printf("Neuer String : %s\n",neu_string); */
strcpy(alt_string, neu_string);
/* Achtung jetzt wirds ernst,
* für Testausgabe in Kommentar setzen*/
fputs(alt_string, copy);
neu_string[0] = '\0';
return EXIT_SUCCESS;
}
```
in dieses C Programm pflanzen:


```
/*********************************
*      Mein Programm.c           *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/  
#include "code.h"                     
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <process.h>
#include <ctype.h>
#define STRING_MAX 8192


#ifdef __unix__
    #define clrscr() printf("\x1B[2J")
#elif __BORLANDC__ && __MSDOS__
    #include <conio.h>
#elif __WIN32__ || _MSC_VER
    
#else

    #define clrscr() printf("clrscr() – Fehler!!\n")
#endif
#define X 'X'
#define O 'O'
#define LEER ' '
#define GAME_OVER 0
#define A_WINNER 1
#define CONTINUE 2
#define HOI  print_spielfeld();
#define clrscr() system("cls")

char TicTacToe[3][3] = { {' ',' ',' '},
                         {' ',' ',' '},
                         {' ',' ',' '} };
/* Spieler1 hat das Zeichen 'X' */
char Spieler1 = X;
/* Spieler2 hat das Zeichen 'O' */
char Spieler2 = O;
/* Anzahl der Felder, die besetzt werden können */
unsigned int felder = 9;
/* Funktionsprototypen */

void print_spielfeld(void);
char neuer_zug(char);
int if_win(void);
/* Gibt den aktuellen Zustand des Spielfelds aus */
void print_spielfeld(void) {
   int i,i_wahl;
   clrscr();
   printf("       1   2   3  \n     +---+---+---+\n");
   for(i = 0; i < 3; i++) {
      printf("  %d  | ",i+1);
      printf("%c",TicTacToe[i][0]);
      printf(" | ");
      printf("%c",TicTacToe[i][1]);
      printf(" | ");
      printf("%c",TicTacToe[i][2]);
      printf(" | \n");
      if(i != 2) {
         printf("     +---+---+---+\n");
      }
      else {
         printf("     +---+---+---+\n");
      }
   }
}
/* Führt einen neuen Zug aus.
 * char ch: Zeichen des Spielers, der an der Reihe ist, 'X'
 * oder 'O'
 * Rückgabewert: Zeichen des Spielers, der eben an der Reihe war
 * falls ein Feld besetzt ist, wird der Rückgabewert vertauscht,
 * damit der aktuelle Spieler nochmals seinen Zug machen kann.
 * Hat ein Spieler gewonnen, gibt die Funktion die
 * symb. Konstante GAME_OVER zurück
 */
char neuer_zug(char ch) {
   unsigned int row, colum;
   nochmal:
   printf("\nSpieler \"%c\" ist an der Reihe\n\n",ch);
   printf("Zeile  (1 bis 3): ");
   scanf("%d",&row);
   printf("Spalte (1 bis 3): ");
   scanf("%d",&colum);
   if(TicTacToe[row-1][colum-1] == LEER) {
      /* Zeichen in das mehrdim. Array */
      TicTacToe[row-1][colum-1] = ch;
      print_spielfeld();
      /* Haben wir schon einen Gewinner? */
      if(if_win() == A_WINNER)
         return GAME_OVER;
   }
   else { /* Ein bereits besetztes Feld */
      print_spielfeld();
      printf("\n Feld ist bereits besetzt \n");
      return (ch == X) ?O :X;
   }
   /* Sind bereits alle Felder besetzt? */
   if(--felder > 0)
      return ch;
   else {
      printf("\nAlle Felder sind besetzt \xC4 Unentschieden\n");
      return GAME_OVER;
   }
}
/* Auswertung aller Möglichkeiten, um einen Gewinner zu ermitteln
 * Rückgabewert: symb. Konstante A_WINNER falls ein Gewinner
 * ermittelt wurde oder die symb. Konstante CONTINUE zum
 * Weiterspielen.
 */
int if_win(void) {
  /* Zuerst Spieler1 'X' */
  if(TicTacToe[0][0] == Spieler1 &&
     TicTacToe[0][1] == Spieler1 &&
     TicTacToe[0][2] == Spieler1 ||
     TicTacToe[1][0] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[1][2] == Spieler1 ||
     TicTacToe[2][0] == Spieler1 &&
     TicTacToe[2][1] == Spieler1 &&
     TicTacToe[2][2] == Spieler1 ||
     TicTacToe[0][0] == Spieler1 &&
     TicTacToe[1][0] == Spieler1 &&
     TicTacToe[2][0] == Spieler1 ||
     TicTacToe[0][1] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[2][1] == Spieler1 ||
     TicTacToe[0][2] == Spieler1 &&
     TicTacToe[1][2] == Spieler1 &&
     TicTacToe[2][2] == Spieler1 ||
     TicTacToe[0][0] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[2][2] == Spieler1 ||
     TicTacToe[0][2] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[2][0] == Spieler1) {
        printf("Spieler1 hat gewonnen\n");
        return A_WINNER;
  }
  /* Jetzt Spieler2 'O' */
  else if( TicTacToe[0][0] == Spieler2 &&
           TicTacToe[0][1] == Spieler2 &&
           TicTacToe[0][2] == Spieler2 ||
           TicTacToe[1][0] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[1][2] == Spieler2 ||
           TicTacToe[2][0] == Spieler2 &&
           TicTacToe[2][1] == Spieler2 &&
           TicTacToe[2][2] == Spieler2 ||
           TicTacToe[0][0] == Spieler2 &&
           TicTacToe[1][0] == Spieler2 &&
           TicTacToe[2][0] == Spieler2 ||
           TicTacToe[0][1] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[2][1] == Spieler2 ||
           TicTacToe[0][2] == Spieler2 &&
           TicTacToe[1][2] == Spieler2 &&
           TicTacToe[2][2] == Spieler2 ||
           TicTacToe[0][0] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[2][2] == Spieler2 ||
           TicTacToe[0][2] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[2][0] == Spieler2)  {
              printf("Spieler2 hat gewonnen\n");
              
              return A_WINNER;
              
   }
   return CONTINUE;
}


int main(void)  {
       char check = X;
       char passwort[80],servername[80];
       int i=0,y=1,anzahl,v_wahl,versuch=3,v_such=3,h_wahl,nn=7,ee,dd,wahl,runde,gewicht,eins=0,res;
       float zahl,mittelw,summe=0.0,grosse,teil1,teil2;
       float  a=1,b=4,c=3,d=6,e=1,f=4,x=6,h=2,ii=5,z=0,k=3,l=5,m=4,aa,bb,cc,jahr,tag,monat,o_jahr,o=1,a_jahr,n_h=1900,betrag;

/*********************************
*Servername und Passwort abfrage *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
zuruck:
	

	printf("\nSie haben 3 Versuche.\n");
	do {
		printf("\nBitte Servername eingeben:\n>");	        	
		gets(servername);
		
		
		if(strcmp(SERVERNAME,servername) == 0) {
			printf("\nServername ok!\n");
        break;              
 }                         
		else
			printf("\nFehlerhafter Servername! \n\a");
		
		versuch--;
		if(versuch==0){goto schluss;
      
      }
		
	} while(versuch > 0);

	
	
	printf("\nSie haben 3 Versuche.\n");
	do {
		printf("\nBitte Passwort eingeben:\n>");		

              
               
               
               
               
               
               gets(passwort);
             


		if(strcmp(PASSWORT,passwort) == 0) {
			printf("\nPasswort ok!\n");
			break;
                }
		
		else
			printf("\nFehlerhaftes Passwort! \n\a");
			
		v_such--;
		if(v_such==0){goto schluss;
      
      }
		
	} 
     

                        while(versuch > 0);  
                      
ende:
/*********************************
*             Menü               *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
    
    
    clrscr();
             printf("\n\n\nWillkomen auf dem Server Schlubl\n");
             printf("\n\n\n\tMen\x81\x61uswahl\n");  
             printf("\n1. Passwort \x84ndern\n");
             printf("\n2. Servername \x84ndern\n");      
             printf("\n3. Projekt 4545 \n");
             printf("\n4. W\x84rungsrechner \n");
             printf("\n5. Notenrechner \n");
             printf("\n6. Tic Tac Toe \n");
             printf("\n7. Body Mass Index \n");
             printf("\n8. Benden \n");
             printf("\n\nDeine Wahl: ");
             scanf("%i",&h_wahl);
             

             if (h_wahl == 1){
                 
                printf("Passwort:");
                scanf("%s",&PASSWORT);
                
                
                 goto zuruck;
                 goto ende;
                 
                 }

             if (h_wahl == 2){
                 
 

            
                 
                 
                 
                 
                 
                 goto ende;
                 }
             if (h_wahl == 3){
                 
/*********************************
*      Das Projekt 4545          *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
clrscr();

                 printf("\n\tDas Projetk 4545\n");
                 
  printf("\nHinweis:");
  printf("\n\n1. Jahren zwischen 1900-2100 eingeben");

  printf("\n\nBitte Jahr eingeben: ");
  scanf("%f",&a_jahr);
  if (a_jahr >= 2100){
  printf("\nSie haben das Jahr 2099 Ueberschritten");
}
  if (a_jahr <= 1900){
  printf("\nSie haben das Jahr 1901 unterschritten");

}
  if (a_jahr >= 1901 && a_jahr <= 2099){
  printf("\nBitte Tag eingeben: ");
  scanf("%f",&tag);

  printf("\nBitte Monat eingeben: ");
  scanf("%f",&monat);
  
sleep(3000);

  printf("\nDie Rechnung lautet:\n");
  printf("\n %f - %f ist %f",a_jahr,n_h,jahr=a_jahr-n_h);

  if (monat == 1 ) {

  
  printf("\n %f - %f ist %f",jahr,o,o_jahr,o_jahr=jahr-o);
  printf("\n %f + %f ist %f",o_jahr,tag,aa,aa=o_jahr+tag);
  printf("\n %f : %f ist %f",o_jahr,m,bb,bb=o_jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,a,dd=cc+a);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
 

}
}
  if (monat == 2) {
  
  printf("\n %f - %f ist %f",jahr,o,o_jahr,o_jahr=jahr-o);
  printf("\n %f + %f ist %f",o_jahr,tag,aa,aa=o_jahr+tag);
  printf("\n %f : %f ist %f",o_jahr,m,bb,bb=o_jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,b,dd=cc+b);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) { 
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 3) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,c,dd=cc+c);
  printf("\n %i %% %i ist %i",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 4) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,d,dd=cc+d);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 5) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,e,dd=cc+e);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 6) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,f,dd=cc+f);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 7) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,x,dd=cc+x);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
  
  
}

}
  if (monat == 8) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,h,dd=cc+h);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 9) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,ii,dd=cc+ii);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 10) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,z,dd=cc+z);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 11) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,k,dd=cc+k);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 12) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,l,dd=cc+l);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");;
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");

  printf("\n\tSamstag\n");
}}

}
sleep(5000);
goto ende;
}


/*********************************
*      Der Währungsrechner       *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
             if (h_wahl == 4){
                 clrscr();
                 printf("\n\tW\x84rungsrechner\n");
      printf("\n\n 1 Dollar --> Franken\n 2 Franken --> Dollar\n 3 Dollar --> Euro\n 4 Euro --> Dollar\n 5 Franken --> Euro\n 6 Euro --> Franken");
      printf("\n\n>Ihre Wahl: ");
      scanf("%i",&wahl);

      if (wahl == 1) {
      printf("\nBitte Dollar-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Dollar \n              sind \n                      %.2f Franken",betrag,betrag*1.1655);
}
      if (wahl == 2) {
      printf("\nBitte Franken-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Franken\n              sind\n                      %.2f Dollar",betrag,betrag/1.2455);
}
      if (wahl == 3) {
      printf("\nBitte Dollar-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Dollar \n             sind\n                      %.2f Euro",betrag,betrag*0.7386);
}
      if (wahl == 4) {
      printf("\nBitte Euro-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Euro \n             sind\n                      %.2f Dollar",betrag,betrag*1.2288 );
}
      if (wahl == 5) {
      printf("\nBitte Franken-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Franken \n                  sind\n                      %.2f Euro",betrag,betrag/1.5780  );
}
      if (wahl == 6) {
      printf("\nBitte Euro-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Euro \n              sind\n                      %.2f Franken",betrag,betrag*1.5305  );
      
}
sleep(3500);
goto ende;
}      
/*********************************
*      Der Notenrechner          *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
             if (h_wahl == 5){
                 clrscr();
                   printf("\n\tNotenrechner\n");
  printf("\nWie viel Noten willst du Eingeben: ");
  scanf("%i",&anzahl);
  printf("\n");
  for(y=1; y<=anzahl; y=y+1){
  printf("Bitte %i. Note eingeben : ",y);
  scanf("%f",&zahl);
  summe=summe+zahl;
}
  mittelw=summe/anzahl;
  printf("\nDurchschnitt der Noten = %f",mittelw);
  sleep(3500);
  summe=0.0;
goto ende;
} 
/*********************************
*          Tic Tac Toe           *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
             
                 if (h_wahl == 6) {
                     n_runde:
                     HOI
                     do { /* War Spieler mit dem Zeichen 'X' gerade dran ... */
             /* ... dann ist jetzt Spieler mit dem Zeichen 'O' dran */
            if(check==X) {
            check=neuer_zug(O);
             }
      else { /* ... ansonsten der Spieler mit dem Zeichen 'X' */
        check=neuer_zug(X);
      }
   } while( check != GAME_OVER );
   sleep (3000);
   printf("\nWollen Sie noch ne Runde spielen?");
   printf("\n\t1 -> Ja");
   printf("\t\t2 -> Nein\n\n\t\t");
   scanf("%i",&runde);
   if(runde == 2) {
       for( i = 0; i < 3; i++)  {
       TicTacToe[0][i] = ' '; }
       i=0;
       for( i = 0; i < 3; i++) { 
       TicTacToe[1][i] = ' '; }
       i=0;
       for( i = 0; i < 3; i++)  {
       TicTacToe[2][i] = ' '; }
       i=0;    
   felder = 9;
   goto ende;
   
}             
   if(runde == 1){
       for( i = 0; i < 3; i++)  {
       TicTacToe[0][i] = ' '; }
       i=0;
       for( i = 0; i < 3; i++) { 
       TicTacToe[1][i] = ' '; }
       i=0;
       for( i = 0; i < 3; i++)  {
       TicTacToe[2][i] = ' '; }
       i=0;
       
       
       
       
       
       felder = 9;
       goto n_runde;
       }
       
       }
...
```
kannst du mir einwenig helfen damit es tut


----------



## CSANecromancer (23. September 2006)

Die billigste Version sollte die hier sein:

```
int wort_begrenzer(char c) {
return (c == ' ' || c == '\n' || c == '\t' || c == '\0' ||
c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
size_t p=strlen(str);
str[p-1] = '\0';
}

int strreplace(int argc, char **argv) {
FILE *file, *copy;
char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
*zgr;
char puffer[STRING_MAX+1];
int such_wortlen, i=0,w;
size_t len=0;

if(argc < 2) {
fprintf(stderr, "", *argv);
return EXIT_FAILURE;
}
file = fopen(argv[1],"r"); /* Datei zum Lesen öffnen */
copy = fopen(argv[1],"r+"); /* Datei zum Schreiben öffnen */
if(file == NULL || copy == NULL) {
printf("Fehler bei fopen()...\n");
return EXIT_FAILURE;
}
alt_string[0]='\0';
/* Kompletten String in alt_string legen ... */
/* Bitte ggf. selbst durch dynamische Speicherverwaltung
* genügend Platz schaffen! */
while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
len += strlen(puffer)+1;
if(len < STRING_MAX)
strcat(alt_string, puffer);
else {
printf("Puffergroesse ueberschritten!\n");
break;
}
}
neu_string[0]='\0';

printf("Welches Wort wollen Sie ersetzen : ");
fgets(such_wort, STRING_MAX, stdin );
chomp(such_wort);

such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
for(w = 0; w < such_wortlen; w++)
/* Nach Wortbegrenzern duchlaufen ... */
if(wort_begrenzer(such_wort[w])) {
printf("Keine Wortbegrenzer im Suchwort\n");
return EXIT_FAILURE;
}
printf("Durch welches Wort wollen Sie ersetzen : ");
fgets(replace_wort, STRING_MAX, stdin);
chomp(replace_wort);
i = 0;
while(1){
if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
/* Kein Wort zu ersetzen */
strcat(neu_string, &alt_string[i]);
break;
}
else { /*..ansonsten von Byte i bis zgr in neu_string*/
strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
/* Jetzt überprüfen, ob wir ein Wort haben und
* keinen Teilstring oder das Wort am Anfang steht */
if( (zgr-&alt_string[0]==0 ||
wort_begrenzer( *(zgr-1))) &&
wort_begrenzer( *(zgr+such_wortlen))) {
strcat(neu_string, replace_wort);
/* Nach ersetztem Wort den Zeiger setzen ... */
i += zgr + such_wortlen-&alt_string[i];
}
else {
strncat(neu_string, zgr, 1);
i += zgr + 1-&alt_string[i];
}
}
} /* Ende while(1) */
/* Für Testausgabe ... */
/* printf("Neuer String : %s\n",neu_string); */
strcpy(alt_string, neu_string);
/* Achtung jetzt wirds ernst,
* für Testausgabe in Kommentar setzen*/
fputs(alt_string, copy);
neu_string[0] = '\0';
}
```
Einfach den Code markieren, kopieren und am Ende deines Sources einfügen.
Aber ich glaube nicht, daß das wirklich etwas bringt, solange du dich nicht intensiv mit C beschäftigst, sondern einfach nur Code Sniplets zusammenträgst. Aber jedem das seine.


----------



## Schlubl (23. September 2006)

Hallo
Den Code den ich oben reinschrieb hab ich selber gemacht, also sag bitte nicht das ich einfach nur die Code Sniplets zusammenhänge

//edit

Den Code hab ich jetzt in mein Programm eingefügt. Und jetzt aber geht es wieder nicht. Also das heisst,man kann ein Wort nicht überschreiben sondern man kommt direkt wieder zurück ins Menu:


```
/*********************************
*      Mein Programm.c           *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/  
#include "code.h"                     
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <process.h>
#include <ctype.h>
#define STRING_MAX 8192


#ifdef __unix__
    #define clrscr() printf("\x1B[2J")
#elif __BORLANDC__ && __MSDOS__
    #include <conio.h>
#elif __WIN32__ || _MSC_VER
    
#else

    #define clrscr() printf("clrscr() – Fehler!!\n")
#endif
#define X 'X'
#define O 'O'
#define LEER ' '
#define GAME_OVER 0
#define A_WINNER 1
#define CONTINUE 2
#define HOI  print_spielfeld();
#define clrscr() system("cls")



char TicTacToe[3][3] = { {' ',' ',' '},
                         {' ',' ',' '},
                         {' ',' ',' '} };
/* Spieler1 hat das Zeichen 'X' */
char Spieler1 = X;
/* Spieler2 hat das Zeichen 'O' */
char Spieler2 = O;
/* Anzahl der Felder, die besetzt werden können */
unsigned int felder = 9;
/* Funktionsprototypen */

void print_spielfeld(void);
char neuer_zug(char);
int if_win(void);
/* Gibt den aktuellen Zustand des Spielfelds aus */
void print_spielfeld(void) {
   int i,i_wahl;
   clrscr();
   printf("       1   2   3  \n     +---+---+---+\n");
   for(i = 0; i < 3; i++) {
      printf("  %d  | ",i+1);
      printf("%c",TicTacToe[i][0]);
      printf(" | ");
      printf("%c",TicTacToe[i][1]);
      printf(" | ");
      printf("%c",TicTacToe[i][2]);
      printf(" | \n");
      if(i != 2) {
         printf("     +---+---+---+\n");
      }
      else {
         printf("     +---+---+---+\n");
      }
   }
}
/* Führt einen neuen Zug aus.
 * char ch: Zeichen des Spielers, der an der Reihe ist, 'X'
 * oder 'O'
 * Rückgabewert: Zeichen des Spielers, der eben an der Reihe war
 * falls ein Feld besetzt ist, wird der Rückgabewert vertauscht,
 * damit der aktuelle Spieler nochmals seinen Zug machen kann.
 * Hat ein Spieler gewonnen, gibt die Funktion die
 * symb. Konstante GAME_OVER zurück
 */
char neuer_zug(char ch) {
   unsigned int row, colum;
   nochmal:
   printf("\nSpieler \"%c\" ist an der Reihe\n\n",ch);
   printf("Zeile  (1 bis 3): ");
   scanf("%d",&row);
   printf("Spalte (1 bis 3): ");
   scanf("%d",&colum);
   if(TicTacToe[row-1][colum-1] == LEER) {
      /* Zeichen in das mehrdim. Array */
      TicTacToe[row-1][colum-1] = ch;
      print_spielfeld();
      /* Haben wir schon einen Gewinner? */
      if(if_win() == A_WINNER)
         return GAME_OVER;
   }
   else { /* Ein bereits besetztes Feld */
      print_spielfeld();
      printf("\n Feld ist bereits besetzt \n");
      return (ch == X) ?O :X;
   }
   /* Sind bereits alle Felder besetzt? */
   if(--felder > 0)
      return ch;
   else {
      printf("\nAlle Felder sind besetzt \xC4 Unentschieden\n");
      return GAME_OVER;
   }
}
/* Auswertung aller Möglichkeiten, um einen Gewinner zu ermitteln
 * Rückgabewert: symb. Konstante A_WINNER falls ein Gewinner
 * ermittelt wurde oder die symb. Konstante CONTINUE zum
 * Weiterspielen.
 */
int if_win(void) {
  /* Zuerst Spieler1 'X' */
  if(TicTacToe[0][0] == Spieler1 &&
     TicTacToe[0][1] == Spieler1 &&
     TicTacToe[0][2] == Spieler1 ||
     TicTacToe[1][0] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[1][2] == Spieler1 ||
     TicTacToe[2][0] == Spieler1 &&
     TicTacToe[2][1] == Spieler1 &&
     TicTacToe[2][2] == Spieler1 ||
     TicTacToe[0][0] == Spieler1 &&
     TicTacToe[1][0] == Spieler1 &&
     TicTacToe[2][0] == Spieler1 ||
     TicTacToe[0][1] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[2][1] == Spieler1 ||
     TicTacToe[0][2] == Spieler1 &&
     TicTacToe[1][2] == Spieler1 &&
     TicTacToe[2][2] == Spieler1 ||
     TicTacToe[0][0] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[2][2] == Spieler1 ||
     TicTacToe[0][2] == Spieler1 &&
     TicTacToe[1][1] == Spieler1 &&
     TicTacToe[2][0] == Spieler1) {
        printf("Spieler1 hat gewonnen\n");
        return A_WINNER;
  }
  /* Jetzt Spieler2 'O' */
  else if( TicTacToe[0][0] == Spieler2 &&
           TicTacToe[0][1] == Spieler2 &&
           TicTacToe[0][2] == Spieler2 ||
           TicTacToe[1][0] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[1][2] == Spieler2 ||
           TicTacToe[2][0] == Spieler2 &&
           TicTacToe[2][1] == Spieler2 &&
           TicTacToe[2][2] == Spieler2 ||
           TicTacToe[0][0] == Spieler2 &&
           TicTacToe[1][0] == Spieler2 &&
           TicTacToe[2][0] == Spieler2 ||
           TicTacToe[0][1] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[2][1] == Spieler2 ||
           TicTacToe[0][2] == Spieler2 &&
           TicTacToe[1][2] == Spieler2 &&
           TicTacToe[2][2] == Spieler2 ||
           TicTacToe[0][0] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[2][2] == Spieler2 ||
           TicTacToe[0][2] == Spieler2 &&
           TicTacToe[1][1] == Spieler2 &&
           TicTacToe[2][0] == Spieler2)  {
              printf("Spieler2 hat gewonnen\n");
              
              return A_WINNER;
              
   }
   return CONTINUE;
}


int main(int argc, char **argv)  {
       char check = X;
       char passwort[80],servername[80];
       int i=0,y=1,anzahl,v_wahl,versuch=3,v_such=3,h_wahl,nn=7,ee,dd,wahl,runde,gewicht,eins=0,res;
       float zahl,mittelw,summe=0.0,grosse,teil1,teil2;
       float  a=1,b=4,c=3,d=6,e=1,f=4,x=6,h=2,ii=5,z=0,k=3,l=5,m=4,aa,bb,cc,jahr,tag,monat,o_jahr,o=1,a_jahr,n_h=1900,betrag;

/*********************************
*Servername und Passwort abfrage *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
zuruck:
	

	printf("\nSie haben 3 Versuche.\n");
	do {
		printf("\nBitte Servername eingeben:\n>");	        	
		gets(servername);
		
		
		if(strcmp(SERVERNAME,servername) == 0) {
			printf("\nServername ok!\n");
        break;              
 }                         
		else
			printf("\nFehlerhafter Servername! \n\a");
		
		versuch--;
		if(versuch==0){goto schluss;
      
      }
		
	} while(versuch > 0);

	
	
	printf("\nSie haben 3 Versuche.\n");
	do {
		printf("\nBitte Passwort eingeben:\n>");		

              
               
               
               
               
               
               gets(passwort);
             


		if(strcmp(PASSWORT,passwort) == 0) {
			printf("\nPasswort ok!\n");
			break;
                }
		
		else
			printf("\nFehlerhaftes Passwort! \n\a");
			
		v_such--;
		if(v_such==0){goto schluss;
      
      }
		
	} 
     

                        while(versuch > 0);  
                      
ende:
/*********************************
*             Menü               *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
    
    
    clrscr();
             printf("\n\n\nWillkomen auf dem Server Schlubl\n");
             printf("\n\n\n\tMen\x81\x61uswahl\n");  
             printf("\n1. Passwort \x84ndern\n");
             printf("\n2. Servername \x84ndern\n");      
             printf("\n3. Projekt 4545 \n");
             printf("\n4. W\x84rungsrechner \n");
             printf("\n5. Notenrechner \n");
             printf("\n6. Tic Tac Toe \n");
             printf("\n7. Body Mass Index \n");
             printf("\n8. Benden \n");
             printf("\n\nDeine Wahl: ");
             scanf("%i",&h_wahl);
             

             if (h_wahl == 1){
                 
                printf("Passwort:");
                scanf("%s",&PASSWORT);
                
                
                 goto zuruck;
                 goto ende;
                 
                 }

             if (h_wahl == 2){
                 
 
int wort_begrenzer(char c) {
return (c == ' ' || c == '\n' || c == '\t' || c == '\0' ||
c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
size_t p=strlen(str);
str[p-1] = '\0';
}

int strreplace(int argc, char **argv) {
FILE *file, *copy;
char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
*zgr;
char puffer[STRING_MAX+1];
int such_wortlen, i=0,w;
size_t len=0;

if(argc < 2) {
fprintf(stderr, "", *argv);
return EXIT_FAILURE;
}
file = fopen(argv[1],"r"); /* Datei zum Lesen öffnen */
copy = fopen(argv[1],"r+"); /* Datei zum Schreiben öffnen */
if(file == NULL || copy == NULL) {
printf("Fehler bei fopen()...\n");
return EXIT_FAILURE;
}
alt_string[0]='\0';
/* Kompletten String in alt_string legen ... */
/* Bitte ggf. selbst durch dynamische Speicherverwaltung
* genügend Platz schaffen! */
while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
len += strlen(puffer)+1;
if(len < STRING_MAX)
strcat(alt_string, puffer);
else {
printf("Puffergroesse ueberschritten!\n");
break;
}
}
neu_string[0]='\0';

printf("Welches Wort wollen Sie ersetzen : ");
fgets(such_wort, STRING_MAX, stdin );
chomp(such_wort);

such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
for(w = 0; w < such_wortlen; w++)
/* Nach Wortbegrenzern duchlaufen ... */
if(wort_begrenzer(such_wort[w])) {
printf("Keine Wortbegrenzer im Suchwort\n");
return EXIT_FAILURE;
}
printf("Durch welches Wort wollen Sie ersetzen : ");
fgets(replace_wort, STRING_MAX, stdin);
chomp(replace_wort);
i = 0;
while(1){
if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
/* Kein Wort zu ersetzen */
strcat(neu_string, &alt_string[i]);
break;
}
else { /*..ansonsten von Byte i bis zgr in neu_string*/
strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
/* Jetzt überprüfen, ob wir ein Wort haben und
* keinen Teilstring oder das Wort am Anfang steht */
if( (zgr-&alt_string[0]==0 ||
wort_begrenzer( *(zgr-1))) &&
wort_begrenzer( *(zgr+such_wortlen))) {
strcat(neu_string, replace_wort);
/* Nach ersetztem Wort den Zeiger setzen ... */
i += zgr + such_wortlen-&alt_string[i];
}
else {
strncat(neu_string, zgr, 1);
i += zgr + 1-&alt_string[i];
}
}
} /* Ende while(1) */
/* Für Testausgabe ... */
/* printf("Neuer String : %s\n",neu_string); */
strcpy(alt_string, neu_string);
/* Achtung jetzt wirds ernst,
* für Testausgabe in Kommentar setzen*/
fputs(alt_string, copy);
neu_string[0] = '\0';
}
                 
                 
                 goto ende;
                 }
             if (h_wahl == 3){
                 
/*********************************
*      Das Projekt 4545          *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
clrscr();

                 printf("\n\tDas Projetk 4545\n");
                 
  printf("\nHinweis:");
  printf("\n\n1. Jahren zwischen 1900-2100 eingeben");

  printf("\n\nBitte Jahr eingeben: ");
  scanf("%f",&a_jahr);
  if (a_jahr >= 2100){
  printf("\nSie haben das Jahr 2099 Ueberschritten");
}
  if (a_jahr <= 1900){
  printf("\nSie haben das Jahr 1901 unterschritten");

}
  if (a_jahr >= 1901 && a_jahr <= 2099){
  printf("\nBitte Tag eingeben: ");
  scanf("%f",&tag);

  printf("\nBitte Monat eingeben: ");
  scanf("%f",&monat);
  
sleep(3000);

  printf("\nDie Rechnung lautet:\n");
  printf("\n %f - %f ist %f",a_jahr,n_h,jahr=a_jahr-n_h);

  if (monat == 1 ) {

  
  printf("\n %f - %f ist %f",jahr,o,o_jahr,o_jahr=jahr-o);
  printf("\n %f + %f ist %f",o_jahr,tag,aa,aa=o_jahr+tag);
  printf("\n %f : %f ist %f",o_jahr,m,bb,bb=o_jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,a,dd=cc+a);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
 

}
}
  if (monat == 2) {
  
  printf("\n %f - %f ist %f",jahr,o,o_jahr,o_jahr=jahr-o);
  printf("\n %f + %f ist %f",o_jahr,tag,aa,aa=o_jahr+tag);
  printf("\n %f : %f ist %f",o_jahr,m,bb,bb=o_jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,b,dd=cc+b);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) { 
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 3) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,c,dd=cc+c);
  printf("\n %i %% %i ist %i",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 4) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,d,dd=cc+d);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 5) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,e,dd=cc+e);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 6) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,f,dd=cc+f);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 7) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,x,dd=cc+x);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
  
  
}

}
  if (monat == 8) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,h,dd=cc+h);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 9) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,ii,dd=cc+ii);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 10) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,z,dd=cc+z);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 11) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,k,dd=cc+k);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSamstag\n");
}
}
  if (monat == 12) {
  
  printf("\n %f + %f ist %f",jahr,tag,aa,aa=jahr+tag);
  printf("\n %f : %f ist %f",jahr,m,bb,bb=jahr/m);
  printf("\n %f + %f ist %f",aa,bb,cc,cc=aa+bb);
  printf("\n %f + %f ist %f",cc,l,dd=cc+l);
  printf("\n %i %% %i ist %i\n",dd,nn,ee=dd%nn);

  if (ee == 0) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tSonntag\n");
}
  if (ee == 1) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMontag\n");
}
  if (ee == 2) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDienstag\n");
}
  if (ee == 3) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tMittwoch\n");
}
  if (ee == 4) {
  printf("\n\a\a\aEs war(ist) an einem:\n");
  printf("\n\tDonnerstag\n");
}
  if (ee == 5) {
  printf("\n\a\a\aEs war(ist) an einem:\n");;
  printf("\n\tFreitag\n");
}
  if (ee == 6) {
  printf("\n\a\a\aEs war(ist) an einem:\n");

  printf("\n\tSamstag\n");
}}

}
sleep(5000);
goto ende;
}


/*********************************
*      Der Währungsrechner       *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
             if (h_wahl == 4){
                 clrscr();
                 printf("\n\tW\x84rungsrechner\n");
      printf("\n\n 1 Dollar --> Franken\n 2 Franken --> Dollar\n 3 Dollar --> Euro\n 4 Euro --> Dollar\n 5 Franken --> Euro\n 6 Euro --> Franken");
      printf("\n\n>Ihre Wahl: ");
      scanf("%i",&wahl);

      if (wahl == 1) {
      printf("\nBitte Dollar-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Dollar \n              sind \n                      %.2f Franken",betrag,betrag*1.1655);
}
      if (wahl == 2) {
      printf("\nBitte Franken-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Franken\n              sind\n                      %.2f Dollar",betrag,betrag/1.2455);
}
      if (wahl == 3) {
      printf("\nBitte Dollar-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Dollar \n             sind\n                      %.2f Euro",betrag,betrag*0.7386);
}
      if (wahl == 4) {
      printf("\nBitte Euro-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Euro \n             sind\n                      %.2f Dollar",betrag,betrag*1.2288 );
}
      if (wahl == 5) {
      printf("\nBitte Franken-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Franken \n                  sind\n                      %.2f Euro",betrag,betrag/1.5780  );
}
      if (wahl == 6) {
      printf("\nBitte Euro-Betrag eingeben: ");
      scanf("%f",&betrag);
      printf("\n>%.2f Euro \n              sind\n                      %.2f Franken",betrag,betrag*1.5305  );
      
}
sleep(3500);
goto ende;
}      
/*********************************
*      Der Notenrechner          *
*--------------------------------*
*  Autor   : Pascal Broder       *
*  Stand   : 02.06.06            * 
*--------------------------------*
*    Compiler: Dev-C++4.9.9.0    *       
*********************************/   
             if (h_wahl == 5){
                 clrscr();
                   printf("\n\tNotenrechner\n");
  printf("\nWie viel Noten willst du Eingeben: ");
  scanf("%i",&anzahl);
  printf("\n");
  for(y=1; y<=anzahl; y=y+1){
  printf("Bitte %i. Note eingeben : ",y);
  scanf("%f",&zahl);
  summe=summe+zahl;
}
  mittelw=summe/anzahl;
  printf("\nDurchschnitt der Noten = %f",mittelw);
  sleep(3500);
  summe=0.0;
goto ende;
} 
....
```
Was ist der Fehler ich habe es auch im MS-Dos probiert geht auch nicht?


----------



## Adi | tmine (25. September 2006)

Ist das was du da gepostet hast dein ganzes c porg. ? Also erstmal hast du verschiedenste Variablen nicht deklariert. sonltest du ev. noch nachholen. sonst ev. mal ganzen code posten. 

mfg

ps: Also mich als angehenden Entwickler störte an deinem Code auch noch, dass der viel zu lang ist. Du hast sehr vieles das man kürzen könnte. Und vieles ist sehr unübersichtlich.Würde ich dir Empfelen zu ändern, denn dadurch hast du dann auch den besseren Überblick, und vergisst nicht mehr Variablen zu deklarieren und solche Sachen. Nur ein Vorschlag. ;-)


----------



## Adi | tmine (25. September 2006)

Hallo Leute sorry wegen doppelpost. Aber ich hätte mal noch ne Frage zum Thema (Anfangsthema).
Ich habe versucht den code so umzubauen das man kein Wort mehr suchen muss, sondern das das such_wort immer definiert ist. Also man gibt nur ein durch was man ersetzen will. Hier mein Versuch. Nur leider geht es nicht. Könnt ihr mir helfen? 

Das hier habe ich durch


```
int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1],neu_string[STRING_MAX+1],
        such_wort[STRING_MAX+1],replace_wort[STRING_MAX+1],
        *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;
```

das ersetzt.

```
}
int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1];
   char neu_string[STRING_MAX+1];
   char such_wort[STRING_MAX+1]="hello";
   char replace_wort[STRING_MAX+1];
   char *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;
```

Irgendwie versteh ich nicht wieso das so nicht geht.

mfg


----------



## GeHo (25. September 2006)

Na das genügt auch noch nicht.
Du legst zwar am Anfang fest, dass das such_wort "hello" ist, aber überschreibst dann unten den Inhalt vom such_wort mit dem fgets-Befehl. Du solltest also noch folgendes auskommentieren (im Orginal ab Zeile 54):

```
printf("Welches Wort wollen Sie ersetzen : ");
   fgets(such_wort, STRING_MAX, stdin );
   chomp(such_wort);
```


----------



## Adi | tmine (25. September 2006)

komisch habs nun das chomp(such_wort); auch noch rausgenommen hatte ich vergessen, geht aber immer noch nicht. Muss ich denn noch was ändern? Also soweit ich sehe sollts dann gehen oder?

thx für die Hilfe bissher super Board hier.

mfg


----------



## Schlubl (25. September 2006)

aditmine hat gesagt.:
			
		

> Ist das was du da gepostet hast dein ganzes c porg. ? Also erstmal hast du verschiedenste Variablen nicht deklariert. sonltest du ev. noch nachholen. sonst ev. mal ganzen code posten.
> 
> mfg
> 
> ps: Also mich als angehenden Entwickler störte an deinem Code auch noch, dass der viel zu lang ist. Du hast sehr vieles das man kürzen könnte. Und vieles ist sehr unübersichtlich.Würde ich dir Empfelen zu ändern, denn dadurch hast du dann auch den besseren Überblick, und vergisst nicht mehr Variablen zu deklarieren und solche Sachen. Nur ein Vorschlag. ;-)


Hallo
Das wusste ich das der Code zu lang ist. Doch ich fragte warum es nicht tut wenn ich ein wort überschreiben will?


----------



## Adi | tmine (26. September 2006)

aditmine hat gesagt.:
			
		

> komisch habs nun das chomp(such_wort); auch noch rausgenommen hatte ich vergessen, geht aber immer noch nicht. Muss ich denn noch was ändern? Also soweit ich sehe sollts dann gehen oder?
> 
> thx für die Hilfe bissher super Board hier.
> 
> mfg



weiss einer RAT? 
wär cool denn ich komm nimmer weiter das will einfach nit.


----------



## GeHo (26. September 2006)

> Muss ich denn noch was ändern? Also soweit ich sehe sollts dann gehen oder?


Ja dann sollte es gehen. Du musst nur oben das Wort such_wort definieren und unten die drei Zeilen (printf, fgets, chomp) zum Auslesen auskommentieren.


----------



## Adi | tmine (26. September 2006)

? habs nun genau so gemacht. Geht aber nicht.  

hier nochmals den ganzen code ... Also ich seh nix mehr was dazu beitragen könnte das es nicht geht. Seht ihr noch irgendwas?

```
/* search_and_replace.c */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define STRING_MAX 8192

int wort_begrenzer(char c) {
   return ( c == '\n' || c == '\t' || c == '\0' ||
       c == '.' || c == ',' || c == ';' || c == '!' ||c == '?');
}

/* Newline von fgets() entfernen */
void chomp(char *str) {
 size_t p=strlen(str);
 str[p-1] = '\0';
}

int main(int argc, char **argv) {
   FILE *file, *copy;
   char alt_string[STRING_MAX+1];
   char neu_string[STRING_MAX+1];
   char such_wort[STRING_MAX+1]="ABCPC000";
   char replace_wort[STRING_MAX+1];
   char *zgr;
   char puffer[STRING_MAX+1];
   int such_wortlen, i=0,w;
   size_t len=0;

   if(argc < 2) {
      fprintf(stderr, "Verwendung: %s datei\n", *argv);
      return EXIT_FAILURE;
   }
   file = fopen(argv[1],"r");    /* Datei zum Lesen öffnen     */
   copy = fopen(argv[1],"r+");   /* Datei zum Schreiben öffnen */
   if(file == NULL || copy == NULL) {
      printf("Fehler bei fopen()...\n");
      return EXIT_FAILURE;
   }
   alt_string[0]='\0';
   /* Kompletten String in alt_string legen ...  */
   /* Bitte ggf. selbst durch dynamische Speicherverwaltung
     * genügend Platz schaffen! */
   while( (fgets(puffer,STRING_MAX+1,file)) != NULL ) {
      len += strlen(puffer)+1;
      if(len < STRING_MAX)
         strcat(alt_string, puffer);
      else {
         printf("Puffergroesse ueberschritten!\n");
         break;
      }
   }
   neu_string[0]='\0';


   such_wortlen = strlen(such_wort); /* Länge des Suchwortes */
   for(w = 0; w < such_wortlen; w++)
   /* Nach Wortbegrenzern duchlaufen ... */
   if(wort_begrenzer(such_wort[w])) {
      printf("Keine Wortbegrenzer im Suchwort\n");
      return EXIT_FAILURE;
   }
   printf("Geben Sie Bitte den PC Namen ein : ");
   fgets(replace_wort, STRING_MAX, stdin);
   chomp(replace_wort);
   i = 0;
   while(1){
      if( (zgr=strstr(&alt_string[i], such_wort)) == NULL) {
         /* Kein Wort zu ersetzen */
         strcat(neu_string, &alt_string[i]);
         break;
      }
      else { /*..ansonsten von Byte i bis zgr in neu_string*/
         strncat(neu_string, &alt_string[i], zgr-&alt_string[i]);
         /* Jetzt überprüfen, ob wir ein Wort haben und
          * keinen Teilstring oder das Wort am Anfang steht */
         if( (zgr-&alt_string[0]==0 ||
              wort_begrenzer( *(zgr-1))) &&
              wort_begrenzer( *(zgr+such_wortlen))) {
            strcat(neu_string, replace_wort);
            /* Nach ersetztem Wort den Zeiger setzen ... */
            i += zgr + such_wortlen-&alt_string[i];
         }
         else {
            strncat(neu_string, zgr, 1);
            i += zgr + 1-&alt_string[i];
         }
      }
   } /* Ende while(1) */
   /* Für Testausgabe ... */
   /* printf("Neuer String : %s\n",neu_string); */
   strcpy(alt_string, neu_string);
   /* Achtung jetzt wirds ernst,
    * für Testausgabe in Kommentar setzen*/
   fputs(alt_string, copy);
   neu_string[0] = '\0';
   return EXIT_SUCCESS;
}
```

thx für die hilfe bisher 

bis denne


----------



## CSANecromancer (27. September 2006)

Also ich habe mir den Source nochmal gegeben. Fehler kann ich jetzt ad hoc erstmal keine sehen, außer, daß du argv[1] statt argv[2] verwendet hast. Aber das ändert nichts daran, daß er nicht die Datei einliest. Idee habe ich jetzt erstmal auch keine.


----------



## deepthroat (27. September 2006)

Hi.





CSANecromancer hat gesagt.:


> Also ich habe mir den Source nochmal gegeben. Fehler kann ich jetzt ad hoc erstmal keine sehen, außer, daß du argv[1] statt argv[2] verwendet hast. Aber das ändert nichts daran, daß er nicht die Datei einliest. Idee habe ich jetzt erstmal auch keine.


argv[2] wäre ja auch falsch wenn bloss sichergestellt wird das argc mind. 2 ist.

@aditmine: Es wäre ja ganz hilfreich wenn du sagst was nicht funktioniert und wie du das Programm aufgerufen hast und was dann dabei herausgekommen (Fehlermeldungen?) ist.

Gruß


----------



## Adi | tmine (27. September 2006)

Also wenn ich den code ganz normal benutze, so wie am anfang dann gehts. Wenn ich aber die Variable "such_wort" oben definiere, und die 3 Zeilen unten wegnehme, dann gehts nimmer. es kommt kein Fehler. Es wird einfach das Wort nicht überschrieben.  

mfg


----------



## CSANecromancer (27. September 2006)

deepthroat hat gesagt.:


> Hi.
> argv[2] wäre ja auch falsch wenn bloss sichergestellt wird das argc mind. 2 ist.


Schlag mich, meine ANSI C-Zeiten sind lange her.


----------



## GeHo (27. September 2006)

Du hast in Zeile 7 den wichtigsten wort_begrenzer rausgenommen: c == ' '.
Richtig sollte in Zeile 7 stehen: 
	
	
	



```
return (c == ' ' || c == '\n' || c == '\t' || c == '\0' ||
```


----------



## Adi | tmine (27. September 2006)

:-(  ohhhh *kopfeinzieh und wegrenn* Peindlich !! ^^ sry hab ich jetzt gar nicht gemerkt. DANKE für den tipp. 

THX

mfg


----------

