PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : strings .... -> schreibt nur ein wort



doomcalyptica
21-10-2004, 17:28
hallo, die funktion der funktionen wie printf und fprintf und co, ist mir klar. leider hab ich nur ein problem mit strings in den funktionen. z.b.:


#include <stdio.h>
#include <iostream.h>

int main(){
char array[255];

printf("C\n");
scanf("%s",array); // eingabe von "hallo welt"
printf("%s\n\nC++\n",array);

// und in c++

cin >> array; // eingabe von "hallo welt"
cout << array;

// erzeugt auch die gleiche ausgabe

return 0;
}

also er frag nach einem string, ich gebe bewusst zwei wörter ein ("hallo welt") (also mit leerzeichen) und eben das ist auh das problem. aufgrand, das nach dem "hallo" ein leerzeichen ist (\0) wird er eben bvei der printf funktion und cout stream nur das hallo anzeigen. fprintf würde das gleiche in eine datei schreiben. wie kann ch mit leerzeichen also mit "\0" ausgaben bzw eingaben schreiben.also funktioniert es mit scanf und printf oder muss ich meinetwegen getchar und putzchar verwenden oder andere ?


please help

wraith
21-10-2004, 17:44
Das Problem ist nicht die Ausgabe, sondern bereits die Eingabe.
Sowohl cin >>, als auch scanf (ohne speziellen Formatstring) brechen die Eingabe bei auftreten eines Leerzeichens (isspace == true) ab.

Entweder du benutzt in C fgets, oder passt scanf an


#include <stdio.h>

int main()
{
char str[256];
scanf("%255[^\n]",str);
printf("%s\n",str);
return 0;
}


In C++ nimmst du cin.getline.

doomcalyptica
21-10-2004, 17:56
ich danke ;)
noch eine frage:
ist der stringterminator das \0 ?

anda_skoa
21-10-2004, 18:01
In C++ nimmst du cin.getline.
Und, weil es wesentlich bequemer ist, gleich string anstatt char[]

Ciao,
_

locus vivendi
21-10-2004, 18:20
In C++ nimmst du cin.getline.

Und, weil es wesentlich bequemer ist, gleich string anstatt char[]
... was implizit bedeutet, nicht cin.getline sondern std::getline aus <string>

doomcalyptica
21-10-2004, 18:45
wieo mus sich in der scanf [^\n] hineinschreiben (was hat das zusagen ?

wraith
21-10-2004, 19:27
wieo mus sich in der scanf [^\n] hineinschreiben (was hat das zusagen ?
Du hast ja gemerkt, daß scanf ansonsten immer an einem Leerzeichen abbricht.
Mit [...] bzw. [^...] erlaubt scanf ein ganz simples Patternmatching (siehe man scanf (http://www.hmug.org/man/3/scanf.html) unter Conversions '[' ).


ist der stringterminator das \0 ?

Ja, oder einfach nur 0 (weniger tippen).

doomcalyptica
21-10-2004, 19:36
ok ich danke ;)

sticky bit
22-10-2004, 08:34
ich danke ;)
noch eine frage:
ist der stringterminator das \0 ?Ja, \0 resp. \0x00 ist der String Terminator. Das ist allerdings nicht das Leerzeichen, das ist \32 resr. \0x20...

Siehe auch http://www.asciitable.com/