char in unterprogramm
-
Nimm statt scanf fgets, das liest die ganze Zeile.
Für ein bisschen mehr C-Style:
word ist eine Funktion, d.h. sie gibt einen Wert zurück. In deinem Fall ist es ein char.
Warum nutzt du das nicht aus und gibst die ermittelte Stelle mit return zurück, oder -1 wenn der String nicht gefunden wurde.
Als Rückgabetyp bietet sich int an.int word(char *a, int max){ //Deklaration int n; //Das Wort "UNIX" wird ermittelt for(n = 0;n<max-3;n++){ /* -3, damit du nicht ausserhalb des Bereiches bist if(a[n] == 'U'){ if(a[n+1] == 'N'){ if(a[n+2] == 'I'){ if(a[n+3] == 'X'){ return = n; /* gefunden an Stelle n*/ } } } } } return -1; /* nicht gefunden */ }
Aufrufen tust du es dann so:
Return = word(a, max);
-
DirkB meinte gets.
printf ("Bitte geben Sie eine Zeichenkette ein:\n"); gets (a);
-
Nein, ich meinte fgets.
fgets(a, max-1, stdin);
Da fgets eine Angabe für die maximale Länge hat.
-
Hey,
die Idee mit dem return bzw. mit dem gets ist zwar in Ordnung, nur ist die Aufgabenstellung so wie ich den Code gestaltet habe. Laut Aufgabenstellung soll mit scanf und mit call-by-reference gearbeitet werden.
a) Entwickeln Sie eine C-Funktion, die als Eingabeparameter eine Zeichenkette (char-Feld/array) erhält und die überprüft, ob in der Zeichenkette die Teilzeichenkette “UNIX” irgendwo vorkommt. Als Rückgabewert soll die Funktion -1 liefern, falls das Textmuster “UNIX” in der Zeichenkette nicht vorkommt, anderenfalls soll die Funktion die Position des ersten Buchstaben “U” des ersten Vorkommens von “UNIX” in der Zeichenkette zurückgeben. Geben Sie einen geeigneten Prototypen für die Funktion an und realisieren Sie die Funktion.
bzw.
b) Schreiben Sie ein main-Programm zum Testen der Funktion aus a). Im Haupt- programm ist zunächst eine Textzeile vom Standardinput einzulesen. Deklarieren Sie ein Character-Feld hinreichend großer Länge (z. B. 256) und verwenden Sie zum Ein- lesen einer Eingabezeile auf dieses Character-Feld die scanf-Formatierung scanf(“%[^\n]”, ...)
-
a) Da steht nichts von Call-by-Reference.
Mein Vorschlag entspricht genau den Vorgaben.b) Warum nimmst du dann nicht wie vorgeschlagen scanf(“%[^\n]”, ...)
Das “%[^\n]” liest die Leerzeichen mit ein.
-
achso^^
Ich hatte mich schon gefragt wozu diese komischen zeichen da sind
-
Hallo,
ich habe ein weiteres Problem, wobei ich eure Hilfe brauche.
Ich soll ein Programm schreiben, welches ein Passwort einliest und checkt, ob es mindestens 12 Zeichen, einen Groß- bzw. Kleinbuchstaben und ein nicht-alphanumerisches Zeichen enthält.Nun steht dabei, dass ich mit islower, isupper, isdigit und isalnum arbeiten soll. Das sind Funktionen in der Headerdatei ctype.h.
Kann mir jemand bei der Syntax dieser Funktion behilflich sein? Im Internet stoße ich nur auf Visual Basic und .Net Programmcodes.
Liebe Grüße,
Student
-
http://lmgtfy.com/?q=islower%2Cc
http://lmgtfy.com/?q=isupper%2Cc
http://lmgtfy.com/?q=isdigit%2Cc
http://lmgtfy.com/?q=isalnum%2CcEtwas Mühe muss man sich auch selber geben.
-
http://www.cplusplus.com/reference/clibrary/
Die Seite ist Pflichtbookmark für alle C- und C++-Programmierer.Beachte das im Headerverzeichnis der Seite die C++-Header angegeben sind (d.h. mit c vorne und ohne .h hinten), die Beispiele sind dann aber in C.
-
/* isalnum example */ #include <stdio.h> #include <ctype.h> int main () { int i; char str[]="c3po..."; i=0; while (isalnum(str[i])) i++; printf ("The first %d characters are alphanumeric.\n",i); return 0; }
Mal eine Frage zu diesem Code:
was genau macht die while-Schleife?
-
solange str[i] ein Buchstabe ist erhöhe i um eins.
Babelfish sagt zu der Ausgabe von printf: "Die ersten %d Buchstaben sind alphanumerisch."