Hilfe - Quellcode funktioniert nicht

knibbel11

Grünschnabel
hey kann mir jmd helfen?

meine searchfunction und replace function will er net erkennne ka wieso

fehler:

undefined indentigier 'search_function'
undefined indentigier 'replace_symbol'



C++:
void neue_Funktion ()

{
     search_function();
     getchar();
}

int search_function()
{ 
      FILE *fp,*datei;

      char text[255];
      char suchwort[2][20]={"NETZ","FID"};
      int AnzahlSuchwoerter=2;
      char* ptr;
      int i;
      char *teilstring;
      



    fp = fopen ("d:\\test.cfg","rt");
    

      if (fp==NULL)
      {
      printf("Fehlen von diso_b_text.ini\r\n"); 
        
    }
    else
    {  datei = fopen ("d:\\textdateineu.txt","wa+");// erstellt die Datei "textdateineu.txt"
    
        
        //laed eine zeile der datei in die zeichenfolge "text". Ende ist entweder ein Newline Zeichen, Dateiende oder maximal 255 Zeichen 
        //Im Fehlerfall wrid ein NULL zeiger zurückgeliefert
        while ( NULL!=fgets(text,255, fp))  
        {

                for (i=0; i<=AnzahlSuchwoerter; i++)// zählt AnzahlSuchwoerter und addiert immer bei durchlaufen der Schleife 1 dazu
                      {
                      ptr = strstr (text,suchwort[i]); //sucht nach dem Vorkommen des in suchwort[i] gespeicherten wortens in dem "text" String 
                  if ( ptr != NULL )
                  {
                        replace_symbol(text); //hier wird die replace funktion aufgerufen, welche ein bestimmtes zeichen im text String ersetzen
                            printf("%s\r\n",text); 
                            fputs (text,datei);// schreibt den gesuchten Text in die neue Datei 
                        break;
                    }
              }
                    
          }
          fclose (datei);  
    }


}
 int replace_symbol(char text[255])
{
    
    char *teilstring;

    while((teilstring = strstr (text, ","))!=NULL)
    {
    *teilstring = ';'; //dereferenzieren des teilstrings und zuweisen des entsprechenden zeichen
    }
    return 0;

}
 
Zuletzt bearbeitet von einem Moderator:
Hi,
du mußt die Funktion VOR dem Funktionsaufruf definieren oder Prototypen benutzen, sonst kennt der Compiler die Funktion zum Zeitpunkt des Aufrufes noch nicht.

Mfg

langer
 
das ist sehr einfach.. denn der compiler arbeitet den quellcode von oben nach unten ab... in der neue_Funktion() ist search_function() NOCH nicht bekannt, da sie erst weiter unten deklariert wird... 2 möglichkeiten dies zu lösen

1. platziere die search_function() über die neue_Funktion()
2. erstelle einen "Prototypen" der search_function() über der neue_Funktion()

Code:
ps
code tags nicht vergessen, kann ja nicht so schwer sein :)

#edit
menno.. 2. platz :D
 
so sieht das dann aus

aber er kennt die replace_symbol(text); erkennt er net

C++:
int search_function()
{
search_function();
getchar();
}

void neue_Funktion ()

{ 
FILE *fp,*datei;

char text[255];
char suchwort[2][20]={"NETZ","FID"};
int AnzahlSuchwoerter=2;
char* ptr;
int i;
char *teilstring;




fp = fopen ("d:\\test.cfg","rt");


if (fp==NULL)
{
printf("Fehlen von diso_b_text.ini\r\n"); 

}
else
{ datei = fopen ("d:\\textdateineu.txt","wa+");// erstellt die Datei "textdateineu.txt"


//laed eine zeile der datei in die zeichenfolge "text". Ende ist entweder ein Newline Zeichen, Dateiende oder maximal 255 Zeichen 
//Im Fehlerfall wrid ein NULL zeiger zurückgeliefert
while ( NULL!=fgets(text,255, fp)) 
{

for (i=0; i<=AnzahlSuchwoerter; i++)// zählt AnzahlSuchwoerter und addiert immer bei durchlaufen der Schleife 1 dazu
{
ptr = strstr (text,suchwort[i]); //sucht nach dem Vorkommen des in suchwort[i] gespeicherten wortens in dem "text" String 
if ( ptr != NULL )
{
replace_symbol(text); //hier wird die replace funktion aufgerufen, welche ein bestimmtes zeichen im text String ersetzen
printf("%s\r\n",text); 
fputs (text,datei);// schreibt den gesuchten Text in die neue Datei 
break;
}
}

}
fclose (datei); 
}


}
int replace_symbol(char text[255])
{

char *teilstring;

while((teilstring = strstr (text, ","))!=NULL)
{
*teilstring = ';'; //dereferenzieren des teilstrings und zuweisen des entsprechenden zeichen
}
return 0;

}
 
Zuletzt bearbeitet von einem Moderator:
Moin,

schau einfach mal die Fehlermeldung und Deinen Code Und die vorherigen Posts) an

Du deklarierst die Funktion, die der Compiler anmeckert ("replace_symbol"), immer noch NACH dem Aufruf !

Und benutze bitte die Code-Tags (der Button mit der #), sonst ist sowas nicht wirklich leserlich!!

Danke und Gruß
Klaus
 
too much functions in this module das bekomm ich nun als fehler?

C++:
void search_function(); 
int replace_symbol(char text[255]); 

void main() 

{ 

search_function(); 
getchar(); 

} 

void search_function() 


{ 
FILE *fp,*datei; 

char text[255]; 
char suchwort[2][20]={"benni","hallo"}; 
int AnzahlSuchwoerter=2; 
char* ptr; 
int i; 
char *teilstring; 
search_function(); 
getchar(); 

fp = fopen ("d:\\test.cfg","rt"); 


if (fp==NULL) 
{ 
printf("Fehlen von diso_b_text.ini\r\n"); 

} 
else 
{ datei = fopen ("d:\\textdateineu.txt","wa+");// erstellt die Datei "textdateineu.txt" 


//laed eine zeile der datei in die zeichenfolge "text". Ende ist entweder ein Newline Zeichen, Dateiende oder maximal 255 Zeichen 
//Im Fehlerfall wrid ein NULL zeiger zurückgeliefert 
while ( NULL!=fgets(text,255, fp)) 
{ 

for (i=0; i<=AnzahlSuchwoerter; i++)// zählt AnzahlSuchwoerter und addiert immer bei durchlaufen der Schleife 1 dazu 
{ 
ptr = strstr (text,suchwort[i]); //sucht nach dem Vorkommen des in suchwort[i] gespeicherten wortens in dem "text" String 
if ( ptr != NULL ) 
{ 
replace_symbol(text); //hier wird die replace funktion aufgerufen, welche ein bestimmtes zeichen im text String ersetzen 
printf("%s\r\n",text); 
fputs (text,datei);// schreibt den gesuchten Text in die neue Datei 
break; 
} 
} 

} 
fclose (datei); 
} 


} 
int replace_symbol(char text[255]) 
{ 

char *teilstring; 

while((teilstring = strstr (text, ","))!=NULL) 
{ 
*teilstring = ';'; //dereferenzieren des teilstrings und zuweisen des entsprechenden zeichen 
} 
return 0; 
 
}
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

wenn ich Deinen Code richtig durchblicke, rufst Du doch "replace_symbol" innerhalb von "search_symbol" auf, oder ?
Also muss die Funktion "replace_symbol" auch vor der Funktion "search_symbol" deklariert werden - INNERHALB von Main - NICHT VOR Main
Du hast ja jetzt auch mehrfache Deklarationen der gleichen Funktion drin

Und nochmals die hier schon mehrfach geäußerte Bitte, die Code-Tags (der Button mit der #) zu benutzen!
Andernfalls bin ich nicht mehr bereit, mich durch diesen unleserlichen Code zu wühlen !! :eek::suspekt:

Gruß
Klaus
 
da möchte man schon garnicht mehr helfen..... CODE TAGS!! danke..

ist das dein kompletter quellcode? bei mir kompiliert er.. allerdings mit 2 warnungen

Code:
warning C4101: 'teilstring': Unreferenzierte lokale Variable
warning C4717: 'search_function': Rekursiv für alle Steuerelementpfade. Die Funktion verursacht einen Stapelüberlauf zur Laufzeit.

wobei die erste warnung nicht kritisch ist, der compiler verwirft die variable einfach (die in der search_function)
aber die 2. is sehr hilfreich und kann zu problemen führen....
warum lässt du die search_function() sich selbst aufrufen? das kann ja an dieser stelle nur schief gehen...

ps
ein array mit einer festen größe als parameter/argument zu übergeben ist sehr unschön, nimm pointer..
 
@rook:
Moin,
hmm - also ich finde, dass auch solche Warnungen kritisch sind!! Sie einfach zu übergehen, ist sicherlich kein guter Programmierstil, da die Warnung ja nicht ohne Grund kommt!

Man sollte sich dann zumindest überlegen, ob die Variable überflüssig ist (und somit raus kann --> Leserlichkeit) oder ob man vergessen hat, sie zu benutzen!!
Ich stelle meine Compiler deswegen auch stets auf die höchste Warnstufe, um auch Warnungen als Fehler zu erhalten !!

BTW: steht in der Netiquette nicht auch was zu permanenter Kleinschreibung :D
Nix für ungut! ;-)
Gruß
Klaus
 
Zuletzt bearbeitet:
moin
zu meiner permanenten kleinschreibung.. ich finde das groß un klein schreiben doof, darum liebe ich die englische sprache :) aber wenn man mir dafür den kopf abreißt, werd ich mich wohl irgendwie an den kram gewöhnen müssen...

und über warnungen lässt sich streiten, darum kann man sie auch völlig deaktivieren.. würde ich natürlich nicht machen... aber die höchste stufe finde ich (zumindest bei meinem VC7 compiler) übertrieben... die 2. höchste langt.. gebe dir auch vollkommen recht, das man so eine variable nicht einfach stehen lässt.. ABER.. das programm was am ende rauskommt is 100% das gleiche... deswegen sagte ich, das es nicht sooo kritisch ist...
 
Zurück