return

Mrbrown

Grünschnabel
hi,

ich habe gerade mit einem Informatik Studium begonnen, nur ich hab bei manchen Sachen echt voll ein Problem.
Ich habe irgendwie ein Verständnis Problem mit dem Rückgabewert.
Bei dem folgenden Programm z.b , warum ist der Rückgabewert -1 in der suchen funktion -1?...liefert die funktion dann nicht immer -1 zurück..und ist das nicht falsch?..Ich hab auch 0 oder 100 eingeben,es ändert an der Tatsache nix..aber ich versteh das einfach nicht...

Hoffe ihr könnt mir helfen.

Danke schon ein mal:)


C++:
int suchen(char text[],char suche[],int value, int value2)
{
 int i,j;
 for (i = 0,j=0; i <= value2; i++)
 {
 if (text[i] == suche[j])
 j++;
 else
 j = 0;
 if (j == value){
 return i - (j-1);

 }




 }


 return - 1;

}


int _tmain(int argc, _TCHAR* argv[])
{
 size_t value=0 ,value2=0;
 int rückgabe;

 char text[] = "Dies ist ein Teststring für diese Aufgabe";
 char suche[]="ist ein";


 value=strlen(suche);
 value2 = strlen(text);
 if (value <= value2)
 rückgabe=  suchen(text, suche, value, value2);
 else
 printf("Der Teilstring ist laenger als der Text ");
 if (rückgabe != -1)
 printf("Der gesuchte Teilstring ist im Text vorhanden und er beginnt an der %d Stelle\n", rückgabe);
 else
 printf("Der gesuchte Teilstring ist nicht im Text vorhanden\n");


 system("Pause");

 return 0;
}
 
Zuletzt bearbeitet von einem Moderator:
Hi

Das "return -1" ist ja nicht das einzige return in dieser Funktion.
C++:
int suchen(char text[], char suche[], int value, int value2)
{
	int i, j;
	for (i = 0, j = 0; i <= value2; i++)
	{
		if (text[i] == suche[j])
		{
			j++;
		}
		else
		{
			j = 0;
		}
		if (j == value)
		{
			return i - j + 1; //hier
		}
	}
	return -1; //und hier
}
Was zurückgegeben wird hängt davon ab, zu welchem return man zeurst kommt (das beendet
die Funktion dann, also kann das Andere nicht mehr ausgeführt werden). Das mit i - j + 1
wird nur beachtet, wenn das if darüber stimmt. Wenn die For-Schleife also durchläuft und dieses
if nie stimmt, dann erst wird -1 zurückgegeben.

Paar andere Sachen:

value und value2 als Parameter wären nicht nötig, strlen kann man auch in der Funktion machen.

Gewöhn dir "_tmain" nicht an, ebenso "_TCHAR",
andere Compiler (außer VS) haben damit nämlich keine Freude,
Vorerst reicht main und char (und für den Rest vom Studium vermutlich auch).

Und system("pause") ebenfalls, hier ein Link mit ein paar Gründen warum es schlecht ist.
 
Sheel hat das schon passend erklärt. Wenn das return in der if zum Einsatz kommt, wird es nicht zum return -1 kommen.

Noch eine Sache:

So von Anfänger zu Anfänger...
Wenn du Code vorliegen hast, der im ersten Moment nicht zu 100% klar verständlich ist, rück ihn erstmal in lesbare Form zurecht.
Du musst jetzt nicht Schema F von Styleguide XY übernehmen. Jeder hat irgendwo seine eigenen Vorlieben. Aber es sollte schon für andere verständlich sein.

Ich habe hier auf der Arbeit öfter den Fall, dass ich in alten Quellcode gucken muss und es ist immer wieder ein Graus... Es gibt echt Quellcode bei dem man den Kommentar "//just a kind of magic" findet.
 
Sorry, aber ich werde nie verstehen, wie man Code uneingerückt schreiben kann (Codegolf ausgenommen). Es gibt heutzutage auch Autoformatter, mit denen du nur einen Tastendruck vom perfekt formatierten Code entfernt bist.


Ich habe hier auf der Arbeit öfter den Fall, dass ich in alten Quellcode gucken muss und es ist immer wieder ein Graus... Es gibt echt Quellcode bei dem man den Kommentar "//just a kind of magic" findet.
Dazu fällt mir nur Folgendes ein: What is the best comment in source code you have ever encountered? ;)
 
Zurück