0

教科書の C コードを見ていると、次の行が含まれています。

...
lastsec = get_seconds();
 sec0 = get_seconds(); while (sec0 == lastsec);
...

その 2 行目の最後にa が欠けているように見えますdoが、いずれにしてもコードはコンパイルする必要があります。

私は、このループがwhile (sec0 == lastsec);時間の終わりまでただ座っていない方法について頭を悩ませています-それget_seconds()が増加しなかったと仮定して...

この本は、コンピュータ アーキテクチャ: 定量的アプローチ、第 5 版です。 これが134ページのコードです。

4

4 に答える 4

6

これはループではなく、本体が空do-whileの単なるループです。whileこの場合、これは無限ループを引き起こすか、決して実行されないようです。

于 2013-02-05T08:30:14.013 に答える
3

無限ループか、条件が最初に失敗したかのどちらかです。

おそらく、条件内の変数の 1 つが、volatile他の変数 (スレッド、ハードウェアなど) によって非同期的に更新されている可能性があります。条件が false になるまで待機します

そうでなければ、そのようなループを作成しても意味がありません。

于 2013-02-05T08:35:35.203 に答える
1

本の印刷の問題のようです。ページを見てください。要求したループの下に、do {が欠落しているループが 2 つあります。ブロックの閉じ括弧はありますが、対応する開き括弧はなく、それが 2 回あります。コメントでさえループについて話します/* repeat until collect 20 seconds*/

私の意見では、プリンターは s を飲み込みましたdo(おそらく、印刷言語にキーワードなどとして含まれている可能性があります)。

論理的な観点からは、これはdo while();ループです。

于 2013-02-05T11:08:43.730 に答える
1

C には 2 種類の while ループがあります。

1)

do {.....} while(CONDITION);

2)

while(CONDITION) {........}

場合while(CONDITION) {........}によっては while(CONDITION)

たとえば、char 配列をコピーする場合は、次の方法で実行できます。

char *SRC="any string";
char DST[10]={0};
char *src = SRC, *dst =DST;
while(*dst++=*src++);

上記の例では、 と のインクリメントがsrcあり、 .dstの場合は while が停止し*src == null characterます。

于 2013-02-05T08:32:37.333 に答える