[英]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_sign2
的ctr
都設置為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.