Anzeige:
Ergebnis 1 bis 9 von 9

Thema: strings .... -> schreibt nur ein wort

  1. #1
    Registrierter Benutzer
    Registriert seit
    12.09.2004
    Beiträge
    69

    strings .... -> schreibt nur ein wort

    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.:
    Code:
    #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

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    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
    Code:
    #include <stdio.h>
    
    int main()
    {
        char str[256];
        scanf("%255[^\n]",str);
        printf("%s\n",str);
        return 0;
    }
    In C++ nimmst du cin.getline.

  3. #3
    Registrierter Benutzer
    Registriert seit
    12.09.2004
    Beiträge
    69
    ich danke
    noch eine frage:
    ist der stringterminator das \0 ?

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von wraith
    In C++ nimmst du cin.getline.
    Und, weil es wesentlich bequemer ist, gleich string anstatt char[]

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    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>

  6. #6
    Registrierter Benutzer
    Registriert seit
    12.09.2004
    Beiträge
    69
    wieo mus sich in der scanf [^\n] hineinschreiben (was hat das zusagen ?

  7. #7
    Registrierter Benutzer
    Registriert seit
    24.06.2003
    Beiträge
    486
    Zitat Zitat von doomcalyptica
    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 unter Conversions '[' ).
    ist der stringterminator das \0 ?
    Ja, oder einfach nur 0 (weniger tippen).

  8. #8
    Registrierter Benutzer
    Registriert seit
    12.09.2004
    Beiträge
    69
    ok ich danke

  9. #9
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Zitat Zitat von doomcalyptica
    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/
    Geändert von sticky bit (22-10-2004 um 09:05 Uhr)
    chmod -R +t /*

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •