Flori Geschrieben 1. Februar 2002 Geschrieben 1. Februar 2002 Hallo, bin gerade mal in die C-Programmierung eingestiegen und hab direkt mal ne Frage : Ich möchte über ne Eingabe z.b. das berühmte "Hallo Welt" einlesen und wieder ausgeben. Dazu habe ich folgenden Quelltext erstellt : #include <stdio.h> void main() { char txt[20]; printf("Eingabe:"); scanf ("%s",&txt); printf(txt); } Nun gebe ich dann "Hallo Welt" ein oder auch nen Satz wie "Mein erstes Programm" und das einzige was er ausgibt ist "Hallo" oder "Mein". Es scheint, als würde das Leerzeichen zum nächsten Wort als Ende der Eingabe betrachtet ?!?! Woran liegt das und wie kann ich das lösen bzw. wie muß ich die Variable festlegen, damit das so klappt wie ich das möchte ?!? Danke schonmal, Flori Zitieren
Flori Geschrieben 1. Februar 2002 Autor Geschrieben 1. Februar 2002 Jo, ich bins nochmal...... Hab diese erste kleine Hürde geschafft und mein Problem gelöst..... Die Funktion gets() ist wohl besser in meinem Proggi als scanf(). Damit gehts problemlos mit dem Einlesen von Sätzen mit Leerzeichen oder Tabs ! Melde mich dann mal wieder, wenns neue Probs gibt.... ->> Hier kann dann wohl zugemacht werden von meiner Seite aus. Flori Zitieren
mst Geschrieben 2. Februar 2002 Geschrieben 2. Februar 2002 Ich glaube, das Problem liegt an dem Adresseoperator % in scanf(...). Da du das Array ohne [] angibt wird automatisch die Adresse zurückgegeben. Das ist allso doppelt. Ich bin der Meinung, das da der Fehler liegt. Normalerweise hat scanf kein Problem mit Leerzeichen. Original geschrieben von Flori Hallo, #include <stdio.h> void main() { char txt[20]; printf("Eingabe:"); scanf ("%s",&txt); printf(txt); } Zitieren
Flori Geschrieben 2. Februar 2002 Autor Geschrieben 2. Februar 2002 Also ich habe auf dem Weg zur Lösung des Problems diese Seite gefunden : hier . Dort steht unter anderem : Bei der Eingabe von Zeichenketten mittels der Funktion scanf() ist noch zu beachten, dass zwar die ENTER-taste die Eingabe beendet, die Übernahme der Zeichenkette aber nur bis zu einem Tabulator oder Zwischenraum erfolgt. Taucht also z.B. ein Zwischenraum im Eingabestrom auf, wird nur der Text bis zum Zwischenraum an die Stringvariable übergeben, der Rest der Eingabe (ab dem Zwischenraum) bleibt im Eingabepuffer stehen. Soll also ein ganzer Satz von der Tastatur an einen String übergeben werden, ist dies besser mittels der Funktion gets() zu erledigen! Zudem habe ich auch die Art und Weise des Quelltexts ausprobiert wie du ihn mir gezeigt hast und es klappte auch nicht wie gewünscht. Aber trotzdem danke und vielleicht hat ja noch einer ne Meinung zu dem Thema hier. Bis dahin, greetz Flori Zitieren
dr.disk Geschrieben 2. Februar 2002 Geschrieben 2. Februar 2002 Es ist in der Tat so, daß wenn man einen String mit scanf einliest man das '&' weglassen muß. scanf erwartet einen Zeiger auf den String und genau dies ist ja schon das Array. Bsp: char str[25]; scanf("%s", str); Zitieren
Flori Geschrieben 2. Februar 2002 Autor Geschrieben 2. Februar 2002 Also habs gerade nochmal ausprobiert. Es funzt bei mir auch ohne "&" nicht. Irgendwie gibt mir die Seite auch recht, daß es mit dem gets() wohl besser geht - und es ist auch so. Das wird da ja nicht umsonst stehen..... Trotzdem nochmal Danke ! Flori Zitieren
dr.disk Geschrieben 4. Februar 2002 Geschrieben 4. Februar 2002 Ok, eins hab ich vergessen: für scanf endet die Eingabe mit einem Whitespace. Bei 'Hallo Welt' endet die Eingabe also nach dem 'Hallo' wegen des Leerzeichens. Für solche Strings ist gets die bessere Wahl. Zitieren
Naberius Geschrieben 4. Februar 2002 Geschrieben 4. Februar 2002 Man Dr String 6.53h, das ist wirklich ultrahart!!! RESPEKT! ;) Zitieren
Naberius Geschrieben 4. Februar 2002 Geschrieben 4. Februar 2002 AHA! Anscheinend nach Englischer Zeit Zitieren
Flori Geschrieben 4. Februar 2002 Autor Geschrieben 4. Februar 2002 Original geschrieben von dr.disk Ok, eins hab ich vergessen: für scanf endet die Eingabe mit einem Whitespace. Bei 'Hallo Welt' endet die Eingabe also nach dem 'Hallo' wegen des Leerzeichens. Für solche Strings ist gets die bessere Wahl. GENAUUUU! Diese Problematik meinte ich. Also lag ich doch gar nicht so verkehrt ! *freu* Dann sind wir also bezüglich Leerzeichen (Whitespaces) doch einer Meinung ! *händeschüttel* Thx a lot, Flori Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.