0

問題解決: Code::Blocks ではまだ動作しないため、Codeblocks と関係があります。

次の C コードに問題があります。「short int」の最大/最小値を表示することになっています。私はそれが正しいと確信していますが、私のマシンでは動作しないようです。

出力として、目的の +32767 と -32768 の代わりにゼロを取得します。

コードの問題ではなく、私のソフトウェアの問題であることを誰かが確認できれば。

PS: 他の人のマシンでコードを実行してみましたが、そこでは問題なく動作しました。

#include <stdio.h>

int main()
{

short int si=0;
short int si_pred=0;

while (si>=0) {
    si_pred=si;
    si++;

}
printf("%d lowest possible value for a short int.\n",si);
printf("%d highest possible value for a short int.\n",si_pred);
return 0;
}
4

2 に答える 2

1

に設定したため、ループは早期whileに終了しており、ループは の場合にのみ実行されます。最大のものは少なくとも 1 でなければならないことがわかっているので、これを試してください。si0si > 0int

short int si = 1;

これで、ループが短絡しなくなり1 > 0ました。

または、さらに良いことに、ループ条件をチェックするように設定するだけですsi >= 0

while(si >= 0) {
   si_pred = si;
   si++;
}
于 2013-10-25T17:04:22.367 に答える
1

問題は Code::Blocks ではありません。問題は、符号付き整数オーバーフローの動作が未定義であることです。コンパイラが符号付き整数オーバーフローを特定の方法で処理する必要がないため、コンパイラ間で一貫した結果が得られるわけではありません。SHRT_MAXに 1 を加えた結果が になるという保証はありませんSHRT_MIN

これを行う正しい方法は、ソース コードに「limits.h」を含めて、 と の値を調べることSHRT_MINですSHRT_MAX

于 2013-10-25T17:32:49.490 に答える