wie kann ich aber prüfen wann die eingabe zuende ist, um die schleife abzubrechen? Newbie001 schrieb:
ich vermute, getline liest eine zeile, bis zum zeilenumbruch oder? Das ist der dritte Parameter von std::getline, welcher standardmässig '\n' ist. Und um alles in einen String zu schreiben:
std::string Alles;
while(! ())
char CurrChar;
std::cin >> CurrChar;
Alles. push_back(CurrChar);}
Du mußt mit dem Verwender des Programms ein Kennzeichen vereinbaren, wann die Eingabe beendet ist (z. B. eine Zeile ohne Inhalt). Ob der Nutzer die Eingabe beendet hat, kannst du dann an diesem Kennzeichen festhalten:
string text = "";
string zeile;
while(getline(cin, zeile) && zeile! String einlesen c.s. ="")
(zeile+'\n');}
Eine radikale Lösung wäre Strg+Z als Eingabe-Ende, aber dann kannst du hinterher nichts mehr eingeben lassen. Ja, das ist der Zweck von getline. wenn ich also alle zeilen in einem string haben möchte müsste ich doch nur immer wieder getline aufrufen, und das eingelesene aneinander hängen, oder? Das wäre eine Möglichkeit, aber warum dann überhaupt zeilenweise einlesen und nicht alles in einem Rutsch?
String Einlesen C Language
C-Strings sind also char-Arrays und genau so werden sie auf allen üblichen Betriebssystemen verwendet, um Texte zu speichern. Damit Du eine Vorstellung hast, dass dieser Kurs sich wirklich an der Realität entlang bewegt: Auch dieser Text, den Du gerade liest, liegt als Char-Array vor. Du lernst also jetzt zu verstehen, wie dieser Text im Computer verarbeitet wird, damit Du ihn lesen kannst. Zwei Dinge müssen bei Char-Arrays bzw. C-Strings auseinander gehalten werden: die Länge des Textes und die Länge des Arrays. Das Ende des Textes muss mit besonderen Zeichen markiert werden, das ansonsten im Text nicht vorkommen darf. Es handelt sich um das Zeichen mit der Nummer 0, das sogenannte Nullbyte. Ein C-String, also ein Text ist so lang, bis ein Nullbyte gefunden wird, jeglicher Text dahinter wird ignoriert. Fehler beim Einlesen eines Strings mit scanf() | C++ Community. Das char-Array ist im optimalen Fall also so lang wie der Text plus ein zusätzliches Char, das das Nullbyte aufnimmt. Das Nullbyte wird von Anfängern sehr gerne vergessen. Der Text kann also kürzer sein als das char-Array, aber er kann nicht so lang sein, wie das Char-Array (weil sonst der Platz für das Nullbyte fehlen würde) und der Text kann natürlich auch nicht länger sein als das Array.
String Einlesen C.S
ledi schrieb:
Das kannst du so nicht machen. fflush() ist für Inputstreams nicht definiert. ISO-C1X, 7. 21. 5. 2 schrieb:
If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined. Was du da machst, ist also kein korrektes C. Du müsstest dir also die noch im Stream befindlichen Daten manuell rausziehen. Ok! Und wie geht das? String einlesen c programming. Kannst du mir dazu ein Beispiel geben? Das steht in der FAQ vom Unterforum. Zu erreichen durch die Dropdown-Liste im Kopfbereich vom Unterforum (FAQ Index)
Oder direkt unter
Gib mal hier im Forum in der Suche:
fflush(stdin);
ein. Da sollte in den ersten Beiträgen etwas dazu stehen. Wenn du schon dabei bist,
void main(...
ist nicht vom Normenausschuss abgesegnet. Nimm besser:
int main(...
Also wenn ich das jetzt richtig verstanden habe:
while ((c = getchar())!
String Einlesen In C
#3
Hallo lookshe! Danke für deine Antwort allerdings habe ich probleme deinen Code zu verstehn bzw Teile davon es wäre net wenn du mir auf die Sprünge helfen könntest. Nun ich möchte nicht das ganze nochmal Posten. Also sag ich kurz so wie ich es meine Verstanden zu haben und Poste nur die Stückchen mit dennen ich Probleme habe. Beliebig langen String einlesen in c | [HaBo]. Also so wie ich das sehe allozierst (by the way: heißt das nun allokieren oder allozieren? ) du zuerst speicher mit malloc dann kommt eine fehlerbehandlung und dann überprüfst du ob ein Zeichen mit dem Wert 13 eingegeben wurde (ist glaub ich Cariage Retrun also neue Zeile) falls nicht überprüfst du ob zahlen buchstaben usw eingeben wurden dann zählst du die inputlänge hoch. Falls die länge die Maxlange übersteigt erweitertst du den speicher mit realloc bei backspace oder escape wird alles zurückgesetz also neue Eingabe. So das war jetzt das ganze in Grob ich hoffe das passt so jetzt zu meinem Fragen. Was übergibst du mit input show_input
char* read_input(int show_input, char* input_text)
bzw für was brauchst du das??
C String Einlesen
Ich terminiere den String einfach nur, warum ich das genau gemacht habe, weiss ich auch nicht mehr. Zudem müsste es eigentlich nach der folgenden if-Abfrage kommen. Aber irgendeinen Grund hatte es. Gut, dass es ein if ist, hast du ja schonmal verstanden. Also machen wir auch mal eines draus:
if (inputLength) {
return inputArray;} else {
return NULL;}
if (show_input) {
putchar(input);} else {
putchar('*');}
Beide Code-Abschnitte machen genau das gleiche, spart nur ein paar Zeilen und ist für jemanden, der mit dem Ternären Operator vertraut ist schneller zu lesen. Für sowas braucht man sich doch nicht entschuldigen, du hast was nicht verstanden und nachgefragt
Ich hoffe ich konnte helfen. /Edith hat die Antwort auf deine Frage wegen dem allokieren oder allozieren gefunden:
(Informatik)#Sprachliches
Allokation = Substantiv
allozieren = Verb
Zuletzt bearbeitet: Nov 13, 2011
#5
Hallo Lookshe! C string einlesen. Danke ich glaube ich habe es nun verstanden... ich werde nun zur nächsten Phase schreiten und das ganze versuchen nach zu Basteln damits auch wirklich sitzt.
String Einlesen C.E
Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an.
Das größte Manko von gets() besteht allerdings darin, daß es keinerlei Schutz gegen das Hinausschreiben über die Array-Grenzen bietet. Deshalb sollte sein Einsatz vermieden und stattdessen die Funktion fgets()
verwendet werden. Diese Funktion ist in stdio. h deklariert als
char *fgets(char *Ziel,
int MaxZeichen,
FILE *Eingabestrom)
Wie Ihnen vielleicht auffällt, ist fgets() nicht in erste Linie für die Eingabe von der Tastatur konzipiert, sondern kommt mit allen möglichen Eingabequellen zurecht. C - Lesen Sie einen string als Eingabe mit scanf. Wenn fgets() von der Standardeingabe lesen soll, muß das dritte Argument stdin lauten. Das erste Argument ist wieder ein Pointer auf einen Puffer, an dem die eingegebenen Daten abgelegt werden sollen, das zweite Argument hingegen begrenzt die Anzahl der akzeptierten Zeichen. fgets() bricht entweder ab, sobald es ein
entdeckt oder MaxZeichen-1 Zeichen eingelesen wurden; wie gets() hängt fgets() noch ' \0 ' ans Ende der Zeichenkette. Im Unterschied zu gets() verwirft es jedoch nicht den abschließenden Zeilenvorschub: Um dessen Enfernung muß sich der Programmierer selbst kümmern (siehe dazu Beispiel fgets.