簡體   English   中英

C:無限循環的正確原因

[英]C:The correct reason for infinte loop

我與另一位大學生爭論以下內容存在無限循環的原因。

#include <stdio.h>
#include <stdlib.h>

void print_sign2(void);

int ctr;
char sign1='x';
char sign2='=';


int main() {
    for (ctr=0; ctr<10; ctr++){
        printf("%c",sign1);
        print_sign2();
    }
    return 0;
}

void print_sign2(void) {
    for (ctr=0; ctr<2; ctr++)
        printf("%c",sign2);
}

我認為造成此循環是因為ctr整數是全局的,並且也在函數print_sign2 這意味着每次調用函數print_sign2ctr都設置為0。對嗎?

print_sign2完成時, ctr<2為false。 第一次成為錯誤的是ctr為2時。因此ctr為2。因此main的循環永遠不會終止,因為ctr永遠不會超過3,因此ctr<10始終為真。

ctr永遠不會成為超過2 main ,這就是為什么它是一個無限循環。

每次print_sign2()都會設置ctr = 2值。

不要將全局變量用作循環控制變量。 那只是糟糕的編程習慣。 請改用局部變量。

使用局部變量進行循環控制可以完全避免這些問題。

#include <stdio.h>
#include <stdlib.h>

void print_sign2(void);

char sign1='x';
char sign2='=';


int main() {
   int ctr;
   for (ctr=0; ctr<10; ctr++){
      printf("%c",sign1);
      print_sign2();
   }
   return 0;
}

void print_sign2(void) {
   int ctr;
   for (ctr=0; ctr<2; ctr++)
      printf("%c",sign2);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM