Ausgabe von selbstgemachen Funktionen mit printf |
17.02.2013, 18:07 | Auf diesen Beitrag antworten » | ||||||||||
Lycaner | Ausgabe von selbstgemachen Funktionen mit printf Ich habe folgendes Programm geschrieben, die zwei Zeichenketten vergleicht. #include <stdio.h> int main (void) { char text[100]; char Matrikelnummer[]="666666"; scanf("%s", text); xy(&text,&Matrikelnummer); printf (" %s und %s ",xy(&text,&Matrikelnummer) ); return 0; } int xy(const char*s1,const char*s2){ int i; for(i=0; s1[i]!='\0'&& s2[i]!='\0'; i=i+1) if(s1[i]!=s2[i])return (0); return(s1[i]=='\0'&& s2[i]=='\0'); } Und jetzt wollte ich schauen ob, es funktioniert aber ich weiß nicht was ich bei der printf –Funktion schreiben soll, damit das Ergebnis der Funktion ausgegeben wird. |
||||||||||
|
|||||||||||
17.02.2013, 18:38 | Auf diesen Beitrag antworten » | ||||||||||
Karlito | Hallo, printf funktioniert so, dass du zuerst einen String mit dem Text übergibst, welcher ausgegeben werden soll. Das ist bei dir " %s und %s ". Dabei werden Platzhalter vergeben. Jedem Platzhalter wird dann einer der folgenden Parameter von printf zugeordnet. Dabei muss die Reihenfolge der Platzhalter und der Parameter gleich sein. "%s" gibt einen C-String aus. D.h. Die Parameter müssen auch vom Typ char[] sein. Du übergibst jedoch nur einen Parameter. xy(&text,&Matrikelnummer) wird ausschließlich zu dem Rückgabewert. printf hat keinerlei Zugriff auf die beiden Parameter &text und &Matrikelnummer. Richtiger wäre:
Du bemerkst sicher, dass ich die & entfernt habe. text und Matrikelnummer sind bereits vom Typ char *. Hängst du ein "&" davon, so erhältst du ein char **. Tipp: Kompiliere immer mit -Wall mit dem gcc bzw /Wall mit dem Windows-Compiler. Die Warnings erzählen dir nach etwas Übung vieles von dem was ich dir grad erzählt habe. Während man bei Java die Warnings oft ignorieren kann, wirst du dein blaues Wunder erleben, wenn du das bei C tust Solltest du noch Fragen haben, kannst Du sie gern hier posten. Über die Lösung freuen sich zukünftige Leser sicher auch. VG, Karlito |
||||||||||
17.02.2013, 19:54 | Auf diesen Beitrag antworten » | ||||||||||
Lycaner | Danke, hat mir sehr geholfen, leider sind bei mir jetzt weiter Fragen aufgetaucht. Int kann nur eine Zahl zurück geben aber in der Funktion( return(s1[i]=='\0'&& s2[i]=='\0'); ) steht ein Bedingung( ich habe die Funktion nicht selber geschrieben, die war vorgegeben, ich sollte nur das passende Program schreiben) Wieso funktioniert es trotzdem? Ich habe es gelöscht und einfach (return 1; )eingegeben und es hat genauso funktioniert. Wenn z.B. statt int xy(const char*s1,const char*s2) void xy(const char*s1,const char*s2) stehen würde, was musste man bei dem return eingeben? Return 1 ist ja falsch, weil void keine Zahl zurückgibt. |
||||||||||
17.02.2013, 20:52 | Auf diesen Beitrag antworten » | ||||||||||
Karlito | Hallo, das funktioniert trotzdem, da es in C keinen eigenen Typ für wahrheitswerte gibt. In C ist es so, dass 0 false entspricht und alles Andere entspricht true. Das ergebnis einer Bedingung, wie du sie da hast, ist immer 1 oder 0. Somit erhältst du , wenn (s1[i]=='\0'&& s2[i]=='\0') wahr wird, dann ist eben der Rückgabewert 1, ansonsten 0. Änderst du den Rückgabetyp einer Funktion auf void, so wird nichts zurückgegeben. Demnach gibt man hinter return einfach nichts zurück. Bsp:
return wird bei void-Funktionnen nur benötigt, wenn du die Funktion vorzeitig verlassen willst. Bsp:
Damit würdest Du, wenn ein Fehler aufgetreten ist, vorzeitig aus der Funktion herausspringen und den daruterstehenden Code der Funktion nicht abarbeiten. Alles Klar? VG, Karlito |
||||||||||
Anzeige | |||||||||||
|
|||||||||||
17.02.2013, 21:01 | Auf diesen Beitrag antworten » | ||||||||||
eulerscheZahl | kleine Ergänzung:
Weil du es nicht ausreichend getestet hast: ist der Anfang des eingegebenen Textes gleich der Martikelnummer, so liefert deine Funktion eine 1: gibt man z.B. 6666667 ein, so wird behauptet, es sei identisch mit 666666. Wie du die Funktion ursprünglich vorgegeben hattest, wird zudem noch geprüft, ob die strings gleich lang sind. |
||||||||||
17.02.2013, 21:41 | Auf diesen Beitrag antworten » | ||||||||||
Lycaner | Vielen Dank |
||||||||||
17.02.2013, 22:10 | Auf diesen Beitrag antworten » | ||||||||||
Lycaner | Oh man, und ich dacht ich habe es verstanden aber bei dem nächsten Beispiel hänge ich schon wieder. Die Funktion ist gegeben und ich soll das Programm schreiben. Aber es komm nur 100 Fehlermeldungen( #include <stdio.h> int main (void) { int a=2; int b=5; char c='+'; calc(a,b,c); printf( "%i %c %i =",a,c,b,calc(a,c,b)); return 0; } int calc(unsigned int e1, unsigned int e2, char op){ switch (op){ case '-':return(e1-e2); case '*':return(e1*e2); case '/':return(e1/e2); default: case '+': return(e1+e2); } } |
||||||||||
17.02.2013, 22:39 | Auf diesen Beitrag antworten » | ||||||||||
Karlito | Hallo, 1. Du musst in C Funktionen bekannt machen, bevor du sie verwendest. D.h. entweder du Kopierst die gesamte Funktion vor die main oder du gibst den so genannten Prototypen vor der main an. Der Prototyp ist der Funktionskopf ohne die eigentliche implementierung. Für dein Beispiel wäre das:
Weiterhin hast du den Platzhalter für das Ergebnis vergessen. Du musst diesen angeben! Es wird nicht einfach das letzte Argument an die Zeichenkette angehangen. VG, Karlito |
||||||||||
17.02.2013, 22:46 | Auf diesen Beitrag antworten » | ||||||||||
Karlito | Vielleicht noch ein Beispiel:
VG, Karlito |
||||||||||
18.02.2013, 12:51 | Auf diesen Beitrag antworten » | ||||||||||
Lycaner | Danke |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
|
Die Neuesten » |
|