0

特定の数の約数をリストするプログラムを作成しようとしていました。これを書くとうまくいきます:

int main () {

  int num, i;

  printf("\nEnter a number: ");
  scanf("%d", &num);

    for(i == 0; i <= num; ++i) {
        if (num % i == 0) {
        printf("\n\t%d", i);
        }
    }
 }

ただし、for ループが

for(i = 0; i <= num; ++i)

これはforループの形式だと思っていたので混乱しています。誰かが私のエラーを指摘してもらえますか?

4

4 に答える 4

5

i == 0は副作用のない式なので、書き込みfor(i == 0; i <= num; ++i)は の書き込みと同じfor(; i <= num; ++i)です。つまり、初期化部分では何もしません。どこでも初期化しないiため、これは未定義の動作を呼び出すことを意味します。

を実行するとi = 0iは初期化されますが、まだ未定義の動作が呼び出されます。最初は 0 になるnum % iため、ゼロによる除算が発生します。i

あなたのシステムでは、ゼロ除算が原因でプログラムがクラッシュしましたが、初期化されていない i を使用したバージョンはたまたまクラッシュせずに実行されました。そのため、「機能した」を使用したバージョンが表示された可能性がありますi==0

于 2013-08-03T19:51:27.040 に答える