Anzeige:
Ergebnis 1 bis 11 von 11

Thema: C: Konkatenieren eines % Zeichens

  1. #1
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Question C: Konkatenieren eines % Zeichens

    Hallo zusammen,

    ich mache gerade einen C/C++ Kurs und muss in einer Aufgabe ein %-Zeichen ausgeben. Ich habe es mit:
    printf("\%\n");
    versucht, erhalte aber nur komische Zahlen an der Stelle auf den Bildschirm. Im Web habe ich auch schon gesucht, konnte aber nichts finden das mir weitergeholfen hat.

    Wäre nett wenn mir jemand das mit dem Konkatenieren (verstehe ich bislang als Ausgabe von einer Programmiersprache benutzten internen Zeichen) erklären könnte.

    Gruss und Danke

    Stefan
    Dipl.-Ing.(FH) Forstwirtschaft
    Stefan Feeser

    https://familie-feeser.net

  2. #2
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Smile

    Hi,

    unter Mithilfe eines Arbeitskollegen habe ich die Lösung selbst gefunden. Man muss einfach
    printf("%%\n");
    sagen. Steht wohl auch in der Manpage, die ich mir doch glatt nicht angesehen habe.

    Falls aber doch jemand genau erklären kann, warum man im diesen Fall %% schreiben muss, wäre das klasse.

    Gruss

    Stefan

  3. #3
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Ich schaetze mal dass das mit der Verarbeitung der argumente zu tun hat die printf bekommt. Es wird im char*-String nach % gesucht und nicht ueberprueft ob vor % ein \ steht.
    Daher wird man dann wohl den Sonderfall mit %% eingefuehrt haben. Ist aber nur so ne Idee von mir, muss ueberhaupt nicht stimmen.
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Hallo zusammen,

    ich mache gerade einen C/C++ Kurs[...]
    Pass aber auf, denn nicht alles was in C eine vernünftige Lösung eines Problems ist, ist auch vernünftig wenn man es 1:1 auf C++ überträgt. Dein Kurs sollte darauf eingehen.

    Falls aber doch jemand genau erklären kann, warum man im diesen Fall %% schreiben muss, wäre das klasse.
    Also meiner bescheidenen Meinung nach hätte euch das im Kurs bereits an dieser Stelle beigebracht werden müssen. So stochern die Kursteilnehmer planlos im Nebel rum, um es mal so blumig auszudrücken. Das übt aber nicht gut.

    Wie auch immer: % ist ein Sonderzeichen im Format-String (so wird das Gebilde das du printf als erstes Argument übergibst genannt) welches der Funktion signalisiert "Halt, jetzt kommt etwas was gesondert zu behandeln ist!". Wenn die Funktion auf dieses Zeichen trifft, dann erwartet sie, dass *danach* besondere Angaben kommen.

    Um noch ganz Spitzfindig zu sein: Es ist keineswegs so, das du %% schreiben *musst*, um ein % auszugeben. Du kannst das auch auf andere Arten erledigen. Womit du übrigens einen Vorschlag für eine Übungs-"aufgabe" hättest: Wenn du auf mindestens drei Arten ein % mit printf ausgeben kannst, dann hast du bestimmt die Hälfte von dem drauf was man über printf wissen muss.

  5. #5
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Thumbs up

    Hi,

    vielleicht habe ich im Kurs ja an manchen Stellen nicht richtig aufgepasst... Mir war eigentlich klar, dachte ich wenigstens, dass mit % eine Formatierung eingeleitet wird. Hierzu gibt es verschiedene 'Formate', je nach Datentyp der ausgegeben werden soll. \ hingegen leitet doch normalerweise eine Escapesequenz ein, also z. B. einen Wagenrücklauf oder ein Beep. Ich war nun der Meinung das man sogenannte interne Bezeichner, also die Zeichen, welche innerhalb von C mit Sonderaufgaben belegt sind durch das sogenannte Konkatenieren (diesen Begriff habe ich irgenwann mal im Internet gefunden und ich bin der Meinung, dass dieser eben das eben beschriebene darstellt - wenn ich hier falsch liege, verbessere mich ruhig) darstellen kann.

    Ich habe eben mal ausprobiert das Prozentzeichen in einfache Anführungszeichen, bzw. Hochkomma, zu packen, aber das funzt nicht. Kannst Du vielleicht doch ein wenig deutlicher werden, da ich offenbar printf doch noch nicht vollständig verstanden habe.

    Ich arbeite aber dran und lese auch noch ein wenig in dem Buch Systemprogrammierung von Herold.

    Gruß und schon mal Vielen Dank für die Infos

    Stefan

  6. #6
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Mir war eigentlich klar, dachte ich wenigstens, dass mit % eine Formatierung eingeleitet wird. Hierzu gibt es verschiedene 'Formate', je nach Datentyp der ausgegeben werden soll. \ hingegen leitet doch normalerweise eine Escapesequenz ein, also z. B. einen Wagenrücklauf oder ein Beep.
    Das ist alles richtig. Man muss aber aufpassen das man es auseinanderhält. Das "escapen" mit \ geschieht durch den Präprozessor zur Zeit des Compilierens. Die Auswertung des Formatstrings geschieht vom Konzept her erst zur Laufzeit des Programms, d.h. wenn sämtliche Präprozessor-Escapesequenzen bereits aufgelöst wurden.

    Ich habe eben mal ausprobiert das Prozentzeichen in einfache Anführungszeichen, bzw. Hochkomma, zu packen, aber das funzt nicht. Kannst Du vielleicht doch ein wenig deutlicher werden, da ich offenbar printf doch noch nicht vollständig verstanden habe.
    Das sind ebenfalls Dinge die bereits beim compilieren ausgewertet werden. Ich dachte eigentlich daran, dass man printf ja angeben kann, dass weitere Funktionsargumente folgen, die dann formatiert ausgegeben werden. Mit einem Buch dazu und suchen nach "printf", "printf examples", "printf beispiele" und ähnlichem sollte eigentlich schnell Licht in die Sache kommen. Und sonst wirst du das bestimmt auch noch in deinem Kurs hören...

  7. #7
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50
    Hi,

    danke für die Hinweise!!!

    Noch nen schönen Abend

    Stefan

  8. #8
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Die 3 Arten der % Ausgabe:
    Code:
    printf("%%");
    printf("%s", "%");
    printf("%c", '%');
    Noch 2 weitere Möglichkeiten:
    Code:
    putchar('%');
    puts("%");
    Und dann gibts noch:
    Code:
    fwrite("%",1,1,stdout);
    write(1,"%",1);
    Und in C++:
    Code:
    cout << '%';
    cout.put('%');
    cout.write("%",1);
    Geändert von panzi (20-07-2006 um 01:16 Uhr)
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  9. #9
    Registrierter Benutzer Avatar von Stefan Feeser
    Registriert seit
    13.02.2000
    Ort
    Karlstein
    Beiträge
    50

    Thumbs up

    Hallo und vielen Dank für den Hinweis!!!

    Auf den formatierten String oder den Character wäre ich nicht gekommen, wenngleich ich die Formatierungszeichen kenne.

    Gruss

    Stefan

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Die coolste Lösung habt ihr aber noch nicht gepostet:
    Code:
    printf("%c",'H'+'a'-'l'+'l'-'o'-' '+'W'-'e'+'l'-'t'+'!');


    (Hätte nicht gedacht, dass das so gut klappt!)

  11. #11
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von Joghurt
    Die coolste Lösung habt ihr aber noch nicht gepostet:
    Code:
    printf("%c",'H'+'a'-'l'+'l'-'o'-' '+'W'-'e'+'l'-'t'+'!');


    (Hätte nicht gedacht, dass das so gut klappt!)
    Geeky! ruled.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

Lesezeichen

Berechtigungen

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