Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [C] Text einlesen...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.04.2009, 14:51 Uhr
~finalr
Gast


Hi,

ich versuche gerade einen Text in C einzulesen, bekomme es aber irgendwie nicht hin.
Hatte es zunächst mit scanf probiert, aber das bricht immer nach einem Leerzeichen ab.


Code:
char Text[256];

printf("Gib einen Text ein >");
scanf("%s", &Text);

printf("Text: %s", Text);



Das funktioniert nur, wenn ich einen Text ohne Leerzeichen eingebe.
Was gibt es noch für Möglichkeiten?

Gruss Daniel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.04.2009, 15:23 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

gets() ist Dein Freund. Wenn Du professionell Software entwickeln willst, solltest Du aber lieber mit fgets() arbeiten, sonst sind Buffer Overruns Tuer und Tor geoeffnet.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.04.2009, 16:16 Uhr
Pablo
Supertux
(Operator)


du kannst auf Bruder Leif hören, bis auf den ersten Satz, den hätte er lieber nicht schreiben dürfen
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.04.2009, 18:25 Uhr
~finalr
Gast


Danke Jungs für die Hilfe! Klappt wunderbar

Hätte noch eine Frage und zwar soll ich den eingegebenen Text umgedreht ausgeben.
Habs mit einer For-Schleife versucht, klappt aber nicht so wirklich:


Code:
char Text[256], Text1[256];
int i, j = 255;

for(i = 0; i <= 255; i++) {
  Text1[j] = Text[i];
  --j;
}

printf("%s", Text1);



Bekomme ich keine Ausgabe bzw. Text ist leer.

Gruss Daniel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.04.2009, 21:26 Uhr
Pler
Einer von Vielen
(Operator)


Jeder Text wird ja mit \0 abgeschlossen, um das Ende des Strings zu kennzeichnen. Du kannst also nicht so einfach alles von vorn nach hinten usw. verschieben.

Nimm als Grenze für die Schleife die Länge des Strings. (strlen())
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.04.2009, 21:35 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat von ~finalr:
Hätte noch eine Frage und zwar soll ich den eingegebenen Text umgedreht ausgeben.
Habs mit einer For-Schleife versucht, klappt aber nicht so wirklich:


ist doch ganz einfach: Du lässt Dir von strlen() mitteilen, wie lang der Text ist, dann fängst Du von hinten an, den Text auszugeben, bis Du am Anfang angekommen bist. Also etwa so:
C++:
l=strlen(text);
for ( ; l>=0; l--)
     printf ("%c", text[l]);



Hans


P.S. Ups, da war mal wieder einer schneller als ich...
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.04.2009, 22:44 Uhr
Pler
Einer von Vielen
(Operator)


@Hans:
So muss er wenigstens nicht so lange nachdenken :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
16.04.2009, 23:39 Uhr
0xdeadbeef
Gott
(Operator)


C-Strings erlauben unter Umständen (abhängig vom gewünschten Interface) eine Möglichkeit, das in einem Pass zu erledigen (also ohne strlen). Es ist eine etwas holprige Angelegenheit, weil man die Länge des Strings nicht von vorneherein kennt, aber man ist in C ja nicht gezwungen, den Anfang des Buffers zu benutzen. Die Idee ist folgende:

C++:
#include <stdio.h>

char *strrev(char *dest, size_t n, char const *src) {
  dest += n - 1;
  for(*dest-- = 0; *src; --dest, ++src) *dest = *src;
  return dest + 1;
}

int main(void) {
  char buf1[256] = "Hallo, Welt";
  char buf2[256];

  char *rev = strrev(buf2, 256, buf1);
  puts(rev);

  return 0;
}


Jetzt ist buf2 nach Aufruf von strrev nicht selbst der umgedrehte String, aber das ist ja unter Umständen auch gar nicht notwendig.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 16.04.2009 um 23:42 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.04.2009, 00:01 Uhr
Hans
Library Walker
(Operator)


Hi Pler,

Zitat von Pler:
@Hans:
So muss er wenigstens nicht so lange nachdenken :-)

da hast Du natürlich recht, aber ich bin etwas aus der Übung, um solche Beispiele zu bringen wie Beefy. Abgesehen davon ist da garantiert noch ein Fehler drin, der mir gerade nicht auffällt...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.04.2009, 01:02 Uhr
0xdeadbeef
Gott
(Operator)


Naja, das war mehr so zur Prinziperläuterung hingekladdet. Wenn wir schon auf Geschwindigkeit optimieren, dann auch richtig, also v2:

C++:
char *strrev(char *dest, size_t n, char const *src) {
  dest += n - 1;
  *dest = 0;
  while(*src) {
    *--dest = *src++;
  }

  return dest;
}


Natürlich geht das ganze so nur unter bestimmten Umständen - du musst vorher wissen, dass strlen(src) nicht größer als die Länge des Buffers - 1 ist, und niemand außerhalb der Funktion darf sich darauf verlassen, dass der umgedrehte String am Anfang des übergebenen Buffers steht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 17.04.2009 um 01:05 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: