Haaku
Anmeldungsdatum: 4. Mai 2016
Beiträge: 8
|
Hallo! Und ich nochmal. Ich habe da nämlich eine weitere Frage. Ist es möglich mit C (Code::Blocks IDE) eine Prozentzahl anzuzeigen die steigt, so als wenn etwas laden würde? Also "XY% geladen...". Also sowas wie immer in der Shell auftaucht wenn man etwas installiert halt. Nur das da nichts geladen wird, sondern einfach nur die %-Anzeige steigt. Eine "Animation" sozusagen. Danke im Voraus! Ps: Sollte das Öffnen mehrerer Threads hintereinander nicht gewünscht sein, werde ich meine Fragen in einen gemeinsamen Thread packen. Ich wollte es lediglich übersichtlich gestalten.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Könntest du, ja. Hinweise dazu: Schreibe eine while/for/do/wieauchimmer-Schleife, die nach einem kurzen zögern (sleep) die Zeile löscht (Rücklauf) und neu schreibt. Dabei ersetzt du jedesmal ein Zeichen mehr. Also als Pseudocode und ohne viel Nachdenken:
for(int i=0; i<10; ++i) {
print "Zeilenrücklauf"; //müsste \r sein?
for(n=0; n<10; ++n) {
if(n<=i)
print "#"
else
print "-"
}
sleep(1);
}
sollte dann sowas wie
#---------
##--------
###-------
usw. ergeben.
|
Haaku
(Themenstarter)
Anmeldungsdatum: 4. Mai 2016
Beiträge: 8
|
Heyho! Danke schonmal! Ich habe die Zeilen mal angepasst, bekomme aber bei der Zeile "n" einen Fehlercode:
/main.c|8|error: ‘n’ undeclared (first use in this function)|
/main.c|8|note: each undeclared identifier is reported only once for each function it appears in" Ich habe den Code mal etwas angepasst. Der sieht nun so aus: 1
2
3
4
5
6
7
8
9
10
11
12
13 | "int main()
{
for(int i=0; i<10; ++i) {
printf("\r"); //müsste \r sein?
for(n=0; n<10; ++n) {
if(n<=i)
printf("#");
else
printf("-");
}
sleep(1);
}
}
|
Aber kleine Anmerkung: Eine Prozentanzeige wäre mir lieber. Wirkt mehr "Shell-iger". Ich glaube auch, dass ich mal gelesen habe das C kein \r unterstützt und man entweder alles löscht (clear - Was nicht so cool wäre) oder garnichts.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12832
|
Haaku schrieb:
Danke schonmal! Ich habe die Zeilen mal angepasst, bekomme aber bei der Zeile "n" einen Fehlercode:
/main.c|8|error: ‘n’ undeclared (first use in this function)|
/main.c|8|note: each undeclared identifier is reported only once for each function it appears in"
Naja, Du musst die Variable "n" schon deklarieren.
Aber kleine Anmerkung: Eine Prozentanzeige wäre mir lieber. Wirkt mehr "Shell-iger".
Naja, Du must ja nur eine Ausgabe der Art machen: | printf("\r%5.1f%%", current * 100.0 / total);
|
Ich glaube auch, dass ich mal gelesen habe das C kein \r unterstützt und man entweder alles löscht (clear - Was nicht so cool wäre) oder garnichts.
Probier es aus.
|
Haaku
(Themenstarter)
Anmeldungsdatum: 4. Mai 2016
Beiträge: 8
|
rklm schrieb: Naja, Du musst die Variable "n" schon deklarieren.
Ähehehe... Ok, das war peinlich. Bitte die Frage einfach wieder vergessen. 😉
Naja, Du must ja nur eine Ausgabe der Art machen: | printf("\r%5.1f%%", current * 100.0 / total);
|
Wie genau und wo baue ich das ein? Alleinstehend? Tut mir leid für die doofen Fragen. Ich bin froh das ich weiß was printf macht. :/
Probier es aus.
Cleared alles wie es scheint.
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
http://stackoverflow.com/questions/20947161/how-to-make-a-progress-bar-using-printf Schau mal hier. Oder suche selbst nach "progress bar in c" mit der Suchmaschine deines Lieblingsüberwachers.
|
Dakuan
Anmeldungsdatum: 2. November 2004
Beiträge: 6345
Wohnort: Hamburg
|
Ich glaube auch, dass ich mal gelesen habe das C kein \r unterstützt ...
Doch, tut es, auch unter Linux. Allerdings wird es bei Linux normalerweise nicht gebraucht, da \n einen kompletten Zeilenwechsel bewerkstelligt. Aber wenn man wirklich nur an den Zeilenanfang will, sollte das auch funktionieren. Allerdings, wenn Du wirklich eine Fortschritsanzeige willst, solltest Du dafür nicht
verwenden, sondern
verwenden. Der Grund ist, das ein fprintf auf stderr ungepuffert ausgegeben wird und daher sofort sichtbar ist.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12832
|
Haaku schrieb: rklm schrieb:
Naja, Du must ja nur eine Ausgabe der Art machen: | printf("\r%5.1f%%", current * 100.0 / total);
|
Wie genau und wo baue ich das ein? Alleinstehend? Tut mir leid für die doofen Fragen. Ich bin froh das ich weiß was printf macht. :/
Bitte entschuldige, aber das kann ja nicht so schwer sein - nach dem Code, den Du schon geschrieben hast. Tipp: Was könnte denn wohl mit current und total gemeint sein?
Probier es aus.
Cleared alles wie es scheint.
Ich wette 100 Gummipunkte, dass das nicht stimmt.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Willst Du so 'nen Fortschrittsbalken tatsächlich selber von der Pike auf programmieren ? 😲 Sonst würde ich ja sagen, das gibt's bei zenity schon fix und fertig: | i=0
(while [ $i -le 100 ]
do
echo $i
sleep 1
((i += 5))
done) | zenity --progress --auto-close
|
Oder geht es Dir darum, C zu lernen ? track
|
Germane91
Anmeldungsdatum: 15. November 2013
Beiträge: 52
|
Hallo! Du könntest übrigens auch die ncurses-Bibliothek verwenden. Damit bekommt man solche Pseudo-Programmfenster hin, wie bei der terminal-basierten Installation von Debian, oder der Konsolenversion von Network-Manager. Vorteil wäre, dass du eine freie Stelle im Terminal beliebig oft überschreiben kannst mit Text. Nachteil wiederum ist, dass du dich erst einmal in die Implementation von ncurses einarbeiten musst... aber abgesehen von dem Lernaufwand, bietet ncurses ein paar wirklich nette Möglichkeiten ☺ MfG
|