Die letzten 10 Beiträge |
Lycaner |
Ok. Alles verstanden. Danke. |
Karlito |
OK.
Welchen Wert !k annimmt, hängt davon ab, welchen Wert k vorher hatte. Für k = 0 ist !k = 1 und für alle anderen Werte ist !k = 0.
VG,
Karlito |
Lycaner |
Es war die gesamte Aufgabenstellung.
!k ist aus einer anderen Aufgabe. Ich bereite mich für eine Klausur vor und rechne die alte Klausuren durch. Deswegen habe ich auch so viele Fragen und nicht so viel Zeit, das selber aus den Büchern oder Google zu erarbeiten, obwohl es für die Klausur besser wäre. |
Karlito |
Hallo,
Zitat: |
Original von Lycaner
Tja, jetzt bin ich etwas verwirrt, eigentlich macht die Funktion nichts und die gibt nur ein Zeichen aus, weil man in printf %c und nicht %s benutz. |
Das hast du falsch verstanden! %c gibt das Ascii-Zeichen zu einem 8-Bit-Wert zurück. Du könntest auch
printf("%c\n", 0x41); schreiben. Das Würde dann einfach ein "A" ausgeben. Es ist also abhängig von einem Konkreten Wert.
%s hingegen nimmt einen Zeiger entgegen und liest ab der Adresse des Zeigers die Werte Byteweise aus dem Speicher und stellt diese als Zeichenkette dar bis es auf den Wert 0 trifft.
Zitat: |
Original von Lycaner
Mit der Funktion kann man nur den erste Buchstaben ausgeben und nur einen Buchstaben. Ich dachte muss eine Funktion schreiben, die auch in der Lage ist beliebiges Zeichen aus der Zeichenkette auszugeben.
|
Nicht laut der Aufgabenstellung die du geschickt hast... Vlt hast du nicht die gesamte Aufgabenstellung geschickt?
Um das Verständnis zu verbessern könntest du ja mal rausfinden, wie du das ein beliebiges Zeichen ausgeben kannst, aber ohne die Funktion xy zu verändern. Dazu musst du den Wert des Zeigers (Die Adresse), den Du an xy übergibst, verändern.
Zitat: |
Original von Lycaner
Kurze Frage am Rande !k ist immer null oder? |
Woher nimmst du !k?
VG,
Karlito |
Lycaner |
Tja, jetzt bin ich etwas verwirrt, eigentlich macht die Funktion nichts und die gibt nur ein Zeichen aus, weil man in printf %c und nicht %s benutz. Mit der Funktion kann man nur den erste Buchstaben ausgeben und nur einen Buchstaben. Ich dachte muss eine Funktion schreiben, die auch in der Lage ist beliebiges Zeichen aus der Zeichenkette auszugeben.
Kurze Frage am Rande !k ist immer null oder? |
Karlito |
Hallo.
ich weiß nicht genau wo dein Fehler ist... Die Variable Zeiger war in der Funktion main nicht bekannt. Noch ein Fehler der sich leider eingeschlichen hat... Das passiert wenn man nicht testet.
Um weitere Missverständnisse zu verhindern, hier die lauffähige Variante.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
#include <stdio.h>
char xy( char *Zeiger);
int main (void) {
char Zeichenkette[100];
scanf("%s", Zeichenkette);
printf(" Erster Buchstabe der Zeichenkette ist %c\n",xy(Zeichenkette));
return 0;
}
char xy( char *Zeiger){
return Zeiger[0];
//return *Zeiger; //liefert das selbe
}
|
|
Sorry für die Umstände. Wenn etwas unklar ist, kannst du natürlich gern nachfragen.
VG,
Karlito |
Lycaner |
char xy( char *Zeiger){
char e;
e=*Zeiger;
}
Wenn ich das, als Funktion eingebe, gibt er nur den Fehler im Hauptprogramm, dass er diese Funktion nicht kennt( |
Karlito |
Zitat: |
Original von Lycaner
Tja, ich habe jetzt das geschrieben. Ist auch falsch.
char xy( char *Zeiger[100]){
char *e;
*e=*Zeiger[0];
return *e;
|
Das ist ziemliches Kauderwelsch, aber auch meine Schuld. S.u.
Zitat: |
Original von Lycaner
Und wenn *Zeiger und Zeiger[] gleich ist, ist *Zeiger[] nicht doppelt deklariert? |
Du hast vollkommen recht. Da war ich etwas schlampig... Es müsste heißen:
code: |
1:
2:
3:
|
char xy( char *Zeiger);
|
|
Vielleicht ginge auch
code: |
1:
2:
3:
|
char xy( char Zeiger[]);
|
|
Das weiß ich nicht genau. Jedenfalls musst du im Anschluss nur das erste Element des "Arrays" zurückgeben. Eine neue Variable brauchst du dafür nicht. Den Funktionskopf musst Du dementsprechend auch anpassen.
Zitat: |
Original von Lycaner
Wenn ich Zeiger [0] schreibe, damit nur der erster Zeichen von der Zeichenkette kommt, woher weist das Programm, dass ich nicht eine Zeichenkette mit 0Zeichen meine?
|
Das weiß das Programm nicht. Das musst Du durch geeignete Prüfungen sicherstellen, bevor du die Funktion aufrufst.
Anmerkung: Leere Zeichenkette nicht mit uninitialisiert verwechseln. Sollte die Zeichenkette nur die Länge 0 haben, so wäre der Rückgabewert der Funktion schlichtweg 0, da Zeichenketten in C ja immer durch 0 bzw '\0' terminiert werden. Ist die Zeichenkette uninitialisiert erhältst du einen Zufälligen Wert... Das gilt es auf jeden Fall zu vermeiden. So wie die main momentan implementiert ist, kann die Zeichenkette ja aber nicht uninitialisiert sein.
VG,
Karlito |
Lycaner |
Tja, ich habe jetzt das geschrieben. Ist auch falsch.
char xy( char *Zeiger[100]){
char *e;
*e=*Zeiger[0];
return *e;
Wenn ich Zeiger [0] schreibe, damit nur der erster Zeichen von der Zeichenkette kommt, woher weist das Programm, dass ich nicht eine Zeichenkette mit 0Zeichen meine?
Und wenn *Zeiger und Zeiger[] gleich ist, ist *Zeiger[] nicht doppelt deklariert? |
Karlito |
Das war der falsche Schluss... Deine main war fast richtig. Du musst nur an die Funktion xy Zeichenkette übergeben und nicht *Zeichenkette. Du brauchst auch xy nicht 2 mal aufrufen. Ich gebe dir mal die main vor:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
#include <stdio.h>
char xy( char *Zeiger[]);
int main (void) {
char Zeichenkette[100];
scanf("%s", Zeichenkette);
printf(" Erster Buchstabe der Zeichenkette ist %c",xy(Zeiger));
return 0;
}
|
|
Du musst jetzt nur noch die Funktion xy implementieren.
VG,
Karlito |
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |
|
|