<sub class="descriptionSection">25-09-2024 05:27:pm // #Wiki // [[Programmierung]]</sub>
____
## Ausgabeformatierung
Zum Formatieren von ausgaben in C++ gibt es die library `iomanip`.
Durch diese Library gibt es ein paar funktionen zum ändern von Outputs:
```cpp
setfill(<Zeichen in Hochkommas>) //setz ein Füllzeichen für jede leere Spalte
setw(int n) // setzt die Feldbreite für die nächste Ouput operation
left / right //linksbündige oder rechtsbündige Ausgabe
internal // bei Zahlen: linkes vorzeichen, Wert rechtsbündig
```
### setw Beispiel
Setw ist eine ziemlich confusing function, also Dokumentier ich sie hier extra:
Beispiel für eine normale ausgabe:
```cpp
cout << "Hello World!" << endl
```
Ausgabe:
```text
Hello World
```
Wenn man jetzt setw nutzt:
```cpp
cout << setw(3) << "Hello World" << endl
```
Jetzt ist die Ausgabe um 3 nach rechts versetzt:
```text
Hello World
```
### Manipulators für Integers
Für Integers gibt es ein paar extra manipulatoren:
```cpp
dec //dezimale Darstellung (Standard für Int)
hex //hexadezimale Darstellung
oct //oktale Darstellung
showpos / noshowpos // + bei positiven Zahlen anzeigen oder unterdrücken
uppercase / nouppercase // Groß oder kleinbuchstaben bei Hex Ausgaben (klein = Standard)
```
### Manipulators für Float und Double
Für doubles gibt es ein paar extra manipulatoren:
```cpp
fixed //gibt immer so viele stellen aus wie angegeben durch setprecision, fügt 0 an
setprecision(<numm>) //Limiert auf <numm> stellen nach dem komma
showpoint //**tells an output stream to write a decimal point for floating-point output, even if the point is unnecessary**
```
## Stdin in C++
Um Werte in C++ einzulesen kann die `cin` funktion verwendet werden:
```cpp
cin >> inputVar1 >> inputVar2
```
Falls mehr als eine Input Variable gefordert ist, müssen die Werte per leertaste vom user getrennt werden.
Sobald die C++ executable auf eine cin line stößt wartet es auf input + return taste, somit ist es wichtig das eine Eingabe Aufforderung per cout vorher geschrieben wird, auch wenn mehr als ein Input gefordert ist, sollten die cin calls getrennt werden:
```cpp
cout << "Bitte geben sie ihr gewicht ein:" << endl
cin >> inputVar1
cout << "Bitte geben sie ihr richtiges gewicht ein" << endl
cin >> inputVar2
```
### Getline
Mit Getline lässt sich ein ganzer String mit leerzeichen einlesen:
```cpp
getline(std::cin, inputVariable)
```
### Getline und Cin mix and match
Wenn man nacheinander cin und getline ausführt, hat der input buffer immernoch das Enter Sonderzeichen im Buffer stehen und beendet sofort die nächste eingabe. Um das zu vermeiden **Muss** cin.ignore gecalled werden:
```cpp
int i;
std::string Input;
cin >> i;
getline(std::cin, Input); //würde direkt enden und einen leeren string abspeichern, da \n immernoch im buffer steht
---
int i;
std::string Input
cin>> i;
cin.ignore();
getline(std::cin, Input) //würde jetzt funktionieren, da der Buffer geflushed wurde!
```