-2
実行中のCプログラムの進行状況をパーセンテージで表示します。進行状況を測定するプログラムの実際の作業は、ループ内に限定されています。ここに私が試したものです:プログラムの実行中に完了の進行状況を表示
int i;
int to = 100000000;
while (i++ < to) {
printf("\rPercent done: %d", (100 * i)/to);
}
実行中のCプログラムの進行状況をパーセンテージで表示します。進行状況を測定するプログラムの実際の作業は、ループ内に限定されています。ここに私が試したものです:プログラムの実行中に完了の進行状況を表示
int i;
int to = 100000000;
while (i++ < to) {
printf("\rPercent done: %d", (100 * i)/to);
}
はばかな質問かもしれませんが、 プログラムの実行中にどのように1は、進行状況を表示しますか?
このようではない。
あなたは複数の問題があります。
i
が初期化されていないので、プログラムがガベージを印刷しますが。 (修正: - >int i = 0;
の代わりにPercent done: 100
が印刷されると、ループだけが終了します。(i*100)/to
の場合、半分ほどの整数オーバーフローが発生するため、代わりにi/(to/100)
を使用してください。コンパイラに依存して、コンパイラがそれを最適化することができることに注意してください。少し嫌な方法は、次のようになります。
#include <stdio.h>
int main (void) {
int i = 0;
int to = 100000000;
while (i++ < to) {
if (i % 1000000 == 0) {
printf("\rPercent done: %d", i/(to/100));
}
dostuff();
}
printf("\rLoop finished");
return 0;
}
注これが唯一の正確なプログラムがループを実行してきたどこまで反映されますことを。ループ前後の作業はこれで測定されません。
これは、フル・パーセントごとにコンソール・メッセージを表示するだけです。あなたが100台のコンソールメッセージを受け取っているのは残念ですが、printf
には100.000.000(!)のコールがあります。それでもなお、それはまだパフォーマンスに影響します。
地獄のように遅いですが、iを初期化するとうまくいくはずです。 –
@カミカゼ、どうやって生きている?どこで更新されますか? – Josh
あなたのコードが壊れているだけでなく、あなたは純粋な標準Cで要求することができません。あなたが好きな場所にコンソールカーソルを設定し、マルチスレッドを実装するためには、 。 – Lundin