anzahl i * |
-
ich weil eine fortschrittsbar erstellen und will die anzahl der prozente (i) mal dem zeichen | nehmen und ausgeben lassen...
#include <iostream> using namespace std; #include <conio.h> #include <windows.h> int main() { for (int i = 0; i <= 100; ++i) { if ( i <= 9) { cout << "0"; } cout << i << "%" << " advancement\r; Sleep(500); } }wie geht das?
-
die direkte Möglichkeit wäre es, die | per for()-Schleife auszugeben:
for(int i=0;i<100;++i) { cout<<setfill('0')<<setwidth(2)<<i<<'\t'; for(int j=0;j<i;++j) cout<<'|'; cout<<endl; }Möglichkeit 3 wäre es, einen String mitzuschleppen und in jedem Schleifendurchlauf zu verlängern:
string balken="" for(int i=0;i<100;++i) { cout<<setfill('0')<<setwidth(2)<<i<<'\t'; cout<<balken; balke+='|'; }Möglichkeit 3 - STL-Algorithmen:
generate_n(ostream_iterator<char>(cout),i,'|');PS: Möglichkeit 4 wären ostream-Manipulatoren:
cout<<setfill('|')<<setwidth(i)<<"";
-
setwidth hat welchen include?
-
#include <iomanip>
-
ja hatte setfill aber nicht setwidth
-
<iomanip> (dort ist übrigens auch setfill() drin). Zur Not kannst du statt der Manipulatoren auch die entsprechenden Memberfunktionen von cout verwenden.
Edit: Sorry, mein Fehler - der Manipulator nennt sich "setw()".
-
iomapin geht bei mir nicht
-
Wie gesagt, mein Fehler - die Memberfunktion heißt "iostream::width()", der zugehörige Manipulator wäre "setw()".
-
jetzt will ich zb die |-zeile nach unten verschieben, aber \r löscht leider nicht \n.
wie kann ich dies möglich machen?
-
Mit Standard C-Mitteln geht das nicht, aber schau dir mal den Thread http://www.c-plusplus.net/forum/viewtopic-var-t-is-134364.html an - da ging es um das selbe Problem.
-
#include <iostream> #include <iomanip> #include <windows.h> #include <string.h> #include <stdio.h> #include <fstream.h> #include <conio.h> using namespace std; int main() { HANDLE hStdout; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); for (int i = 0; i <= 100; ++i) { if ( i >= 0 || i <= 20) { SetConsoleTextAttribute(hStdout, FOREGROUND_RED); } if ( i >20 && i <=55) { SetConsoleTextAttribute(hStdout, FOREGROUND_RED | FOREGROUND_GREEN); } if ( i>55 && i<=85) { SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN | FOREGROUND_BLUE); } if ( i>85) { SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN); } if ( i <= 9) { cout << "0"; } cout << i << "%" << " advancement "; cout<< setfill('°')<<setw(i)<<"" << "\r"; Sleep(100); } }was könnte man gegen dieses problem tuen?
-
Welches Problem genau? Ich würde dir mal empfehlen, die <conio.h> zu öffnen und dort nach einer Funktion wie "gotoxy()" oder "SetCursorPos()" zu suchen.