Problem mit Cout (Umbiegen von Cout?)



  • Darf ich mal fragen, was eigentlich die Funktion deiner Funktion "TextAusgeben" ist? Ich bin da nicht so recht schlau draus geworden. Mit welchen Argumenten rufst du die Funktion im Fehlerfall denn auf?



  • Also ich habe das benutzt, was ihr unter:
    www.reyman.de.vu/Figur.html

    lesen könnt....

    TextAusgeben("Nur Mut, umbruch Hallo!");

    So rufe ich die Funktion auf,
    bekomme jedoch viele Warnungen (1,2,3 Parameter haben Default werte!!!)
    ( Dann ein Fehler bei string::npos)



  • Was soll die Funktion denn nun machen? Ist mir rätselhaft 🙂 Bei mir ist die If-Abfrage übrigens nicht wahr und wird nicht ausgeführt. Von daher wäre es hilfreich, zu erfahren, was du mit dieser Funktion überhaupt bezweckst. Sie heißt "Ausgabe..." aber die einzige Ausgabe ist "OK" 😕



  • den String bei jedem Wort: "umbruch" teilen,
    zentrieren (macht dann die Funktion: MitteZeichnen o.ä.) und dann
    einen realen Umbruch (d.h. \n ) anhängen...



  • Und was hat es mit der Ausrichtung und anzahlZeichenrechnen auf sich?

    Fakt ist jedenfalls, dass deine Funktion nur "OK" ausgibt und ich nicht weiß, was du mit einer Umlenkung von cout meinst.



  • das mit der Umlenkung hat sich geklärt.
    Die FUnktion ist generell "defekt", da er z.B.
    bei dem Satz :

    Hallo, umbruch Hallo2!

    folgendes ausgibt:

    Hall
    uch Hallo2!

    Ist irgendwo ein Fehler mit dem "String Replaxe".

    Ich werde die Funktion nochmals neu schreiben.

    Vielen Dank an alle.
    Thread kann somit geschlossen werden, da es ja nichts mit
    cout mehr auf sich hat.



  • Reyman schrieb:

    Vielen Dank an alle.
    Thread kann somit geschlossen werden, da es ja nichts mit
    cout mehr auf sich hat.

    thread wird natürlich nicht geschlossen, da er durchaus anlass sein kann, dass jemand was total kluges und hilfreiches schreibt.

    und wenn nicht, schließt ihn die zeit von alleine.



  • Wenn du wirklich nur, jedes "umbruch" durch ein "\n" ersetzen willst, könntest du das so machen, wie im Code unten. Du solltest dir vielleicht mal diese Seite anschauen.

    #include <iostream>
    #include <string>
    #include <conio.h>
    
    using namespace std; 
    
    string TextAusgeben(string strIn,string strbr) {
    	size_t iPos = 0;
    
    	while ( (iPos = strIn.find(strbr)) != string.npos) {	
    		strIn.replace(iPos,strbr.size(),"\n");
    	};
    
    	return strIn;
    }
    
    int main() {
    	std::cout << TextAusgeben("12345[umbruch]23456[umbruch]34567","[umbruch]");
    
    	getch();
    	return 0;
    }
    
    Ausgabe:
        12345
        23456
        34567
    

    EDIT:

    int iAnzahlDerZ(0);
    

    So initialisiert man keine elementaren Datentypen.

    int iAnzahlDerZ = 0;
    

    Das, was du gemacht hast, wäre ein Konstrukturaufruf einer Klasse



  • masterofx32 schrieb:

    EDIT:

    int iAnzahlDerZ(0);
    

    So initialisiert man keine elementaren Datentypen.

    int iAnzahlDerZ = 0;
    

    Das, was du gemacht hast, wäre ein Konstrukturaufruf einer Klasse

    Na na... erstere Variante ist aber die bessere. Zweiteres kreidet Herr Stroustrup in Exceptional C++ als unschön an. Stell Dir vor, Du hast eine Template-Funktion und hantierst mit einem Datentypen den Du nicht kennst. Dann möchtest Du den Konstruktor auf jeden Fall explizit aufrufen (ohne implizite Typumwandlungen). Was Dir natürlich nicht passiert, weil Du deine Konstruktoren immer schön explicit machst 😃



  • ich sehe die erste Variante auch als die schönere an.
    Werde das auch, da ich mich jetzt schon so dran gewöhnt
    habe auch nicht ändern.



  • Na gut 😉



  • Ihr schreibt wirklich

    for (int i(0); i < 4; ++i)
    

    ? Sieht ja doch sehr ungewohnt aus... *find*



  • der Mensch ist ein Gewohnheits-Tier 😉


Anmelden zum Antworten