\t durch "." ersetzen??
-
Hallo,
habe da ein kleines optisches Problem (konsolenanwendung):
verkürzter Code:for (int i=0; i<15;i++) cout << "\n\t" << i << ") " << "\t\t" << GetText(i);Nun ist das (wie im Code ersichtlich) eine Liste mit 14 Punkten und man kann leider nicht mehr ganz so leicht erkennen, welcher Text (rechts) zu welcher Zahl (links) gehört.
Eine Lösungsidee wäre die leeren Stellen die durch "\t" erzeugt werden mit "." zu füllen. Jedoch bin ich da mit meinem Latein gewaltig am Ende. Könnt ihr mir da weiterhelfen?? Wär echt super! DankePS: Bin auch für andere Lösungsvorschläge bereits, sofern sie in mein Programm passen, dass ich aus Platzgründen hier nicht gepostet habe...
PPS: Der Code ist nur zur Veranschaulichung der Situation. Es ist nicht grundsätzlich gegeben, dass der linke Text (im Code "i") immer nur eine 1- bzw. 2-stellige Zahl ist...
-
3Stein schrieb:
Nun ist das (wie im Code ersichtlich) eine Liste mit 14 Punkten
nein 15
for (int i=0; i<15;i++) cout << "\n\t" << i << ") " << "." << GetText(i);so

-
Ein paar Ansätze...
#include <iostream> #include <iomanip> #include <sstream> #include <string> using namespace std; string GetText(int i) { stringstream buf; buf << "Der " << i << ". Text"; return buf.str(); } int main(int argc, char *argv[]) { for (int i = 0; i < 1100; i += 90) { stringstream buf; buf << i << ") "; string str = buf.str(); str.resize(20, '.'); cout << " " << str << " " << GetText(i) << endl; } for (int i = 0; i < 1100; i += 90) { stringstream buf; buf << i << ") "; cout << " " << setw(4) << i << ") .............. " << GetText(i) << endl; } for (int i = 0; i < 1100; i += 90) { stringstream buf; buf << i << ") "; cout << " " << left << setw(20) << setfill('.') << buf.str() << " " << GetText(i) << endl; } }
-
@kindergarten:
ja 15. Im O-Code sind es 14. Daher der Fehler
aber ich brauchte mehr Punkte als einen, denn er Abstand soll ja nach wie vor \t-groß sein@lagalopex: GENIAL! DANKE!!
-
Ich hab grad mal ein wenig herumgespielt, folgendes ist dabei rumgekommen, nur für den Fall, dass es jemanden interessieren könnte:
#include <iostream> #include <windows.h> unsigned int getConsoleXPos() { CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo( GetStdHandle(STD_OUTPUT_HANDLE), &info ); return info.dwCursorPosition.X; } template<char repl_char> std::ostream& tab_repl( std::ostream& o ) { static const unsigned int tab_size = 8; const unsigned int count = tab_size - ( getConsoleXPos() % tab_size ); for ( unsigned int i=0; i<count; i++ ) o << repl_char; return o; } int main() { std::cout << "\t" << 5 << "\t\t" << "Hallo" << std::endl; std::cout << tab_repl<'.'> << 5 << tab_repl<'.'> << tab_repl<'.'> << "Hallo" << std::endl; }Es läuft nur unter Windows und keine Ahnung, unter welchen Windowsen überhaupt die Tab-Weite von 8 stimmt. Achso, und es funktioniert natürlich nur mit Konsole, nicht mit Dateien oder ähnlichem Firlefanz

-
dazu hab ich mal ne Frage.
Ich hab ein fettes Packet an #includes in einer hpp datei, die ich am anfang einbinde
mach ich dann den Code von dir "Badestrand", dann bekomm ich Fehlermeldungen "first use (...)"
wenn ich das packet nicht einbinde sondern nur iostream & windows.h, dann geht es, obwohl im packet beide drinnen sind.
woran zur h**** kann das liegen?
-
3Stein schrieb:
dazu hab ich mal ne Frage.
Ich hab ein fettes Packet an #includes in einer hpp datei, die ich am anfang einbinde
mach ich dann den Code von dir "Badestrand", dann bekomm ich Fehlermeldungen "first use (...)"
wenn ich das packet nicht einbinde sondern nur iostream & windows.h, dann geht es, obwohl im packet beide drinnen sind.
woran zur h**** kann das liegen?Header Guards?