.. highlightlang:: us .. index:: printf .. _printf: printf ====== .. us.tag printf NOTREADYGERMAN :ref:`printf` gibt Daten in formatierter Form im Kommandofenster aus. .. function:: rsNChars = printf(ssFormat, arg1, ...) .. us.return **Returnwert** *rsNChars* ist die Anzahl der ausgegebenen Zeichen oder -1 wenn ein Fehler aufgetreten ist. .. us.params **Parameter** .. uparam:: ssFormat *ssFormat* ist ein skalarer String mit eingebetteten Formatierungzeichen, der bestimmt, wie die folgenden Argumente *arg1* bis *argn* ausgegeben werden. Ein Formatierungfeld hat folgenden Aufbau:: %{flags}[width][.precision][m|l|L]type % Das Prozentzeichen beginnt ein Formatierungfeld. Um ein Prozentzeichen auszugeben muss ``%%`` geschrieben werden. flags Ein *flag* ist eins der folgenden Zeichen: .. list-table:: :header-rows: 1 * - Wert - Bedeutung * - ``-`` - bewirkt, daß die Ausgabe linksbündig erfolgt. * - ``+`` - es wird ein "+" oder "-" - Zeichen vor die Ausgabe gesetzt. * - ``#`` - bewirkt, daß bei den Formatierungen "e", "E", "f", "g", "G" immer auch der Dezimalpunkt ausgegeben wird. Bei der "g" oder "G"-Formatierung werden abschliesende Nullen ausgegeben. Bei der "x" oder "X"-Formatierung wird der Ausgabe ein "0x" oder "0X" vorangestellt wird, falls der Wert ungleich 0 ist. Bei der "o"-Formatierung werden führende Nullen ausgegeben. * - (blank) " " - bewirkt, daß eine positive numerische Ausgabe mit einem Leerzeichen eingeleitet wird. * - ``0`` - bewirkt, dass links mit Nullen aufgefüllt wird. width *width* ist eine ganze Zahl, die die minimale Feldbreite angibt. Wenn die Ausgabe zu breit ist, wird die Feldbreite automatisch verbreitert. .precision *precision* ist ein Punkt gefolgt von einer ganzen Zahl, der bei Zahlenausgaben die Anzahl der auszugebenden Nachkommastellen ausgibt. Folgt dem Punkt keine Zahl, wird 0 angenommen. Bei Strings ("s"-Formatierung) werden so viele Zeichen ausgegeben wie *precision* angibt. m bewirkt, daß die Ausgabe bei Matrizen und Spaltenvektoren zeilenweise erfolgt. l,L Die Zeichen ``"l"`` und ``"L"`` werden ignoriert. type *type* kann folgende Werte annehmen: .. list-table:: :header-rows: 1 * - Wert - Bedeutung * - f - Das Argument ist reell. Es wird in der Form [-]dddd.dddddd ausgegeben. * - e, E - Das Argument ist reell. Es wird in der Form [-]dddd.dddddd"e"ddd ausgegeben. Bei einem großen "E" wird ein großes "E" als Exponentialzeichen ausgegeben. * - g, G - Das Argument ist reell. Die Ausgabe erfolgt im "e" oder "E"-Format wenn der Exponent des Arguments kleiner als 3 oder größer als die Genauigkeit ist. Ansonsten erfolgt die Ausgabe im "f"-Format. * - i, d, u - Das Argument ist reell. Es wird vor der Ausgabe in eine ganze Zahl umgewandelt. * - x, X, p - Das Argument ist reell. Es wird vor der Ausgabe in eine ganze Zahl umgewandelt und als Hexadezimalzahl ausgegeben. * - o - Das Argument ist reell. Es wird vor der Ausgabe in eine ganze Zahl umgewandelt und als Oktalzahl ausgegeben. * - c - Das Argument ist reell. Es wird vor der Ausgabe in ein ASCII-Zeichen umgewandelt. * - s - Das Argument ist ein String. .. us.comment **Kommentar** Alle Typen bis auf den (``"s"``-Typ) verlangen reelle Argumente. .. us.example **Beispiel** :: * a = rand(1,5) * 100 * printf("%10d\n%10.2f\n%10.2e\n%10.2g\n", a, a, a, a) 86 8 43 84 98 86.18 8.30 43.97 84.32 98.93 8.62e+01 8.30e+00 4.40e+01 8.43e+01 9.89e+01 86 8.3 44 84 99 204.0000 // 204 ist die Anzahl der ausgegebenen Zeichen. .. seealso:: :ref:`fprintf`, :ref:`sprintf`, :ref:`ltostr` :sub:`id-1871575`