我与另一位大学生讨论过以下原因是否存在无限循环。
#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.这是对的吗?
答案 0 :(得分:6)
print_sign2
完成后,ctr<2
为false。第一次变为false时ctr
为2.所以ctr
为2.因此main
中的循环永远不会终止,因为ctr
永远不会超过3而ctr<10
angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap'])
.controller('AccordionDemoCtrl', function($scope) {
$scope.oneAtATime = true;
$scope.groups = [{
title: 'Dynamic Group Header - 1',
content: 'Dynamic Group Body - 1'
}, {
title: 'Dynamic Group Header - 2',
content: 'Dynamic Group Body - 2 Dynamic Group Header - 2 Dynamic Group Header - 2 Dynamic Group Header - 2 Dynamic Group Header - 2 Dynamic Group Header - 2'
}];
$scope.items = ['Item 1', 'Item 2', 'Item 3'];
$scope.addItem = function() {
var newItemNo = $scope.items.length + 1;
$scope.items.push('Item ' + newItemNo);
};
$scope.status = {
isFirstOpen: true,
isFirstDisabled: false
};
//scrolling
var accordion = $('.accordion'), timeOut;
accordion.on('click', '.panel-heading', function(e) {
if(e.target.nodeName != 'SPAN') return;
var element = this;
clearTimeout(timeOut);
//since we dont know the exact offsetTop for dynamic content
//using timeout 350 which let angular complete its render
timeOut = setTimeout(function() {
accordion.animate({
scrollTop: element.offsetTop -2
}, 300);
}, 350);
});
});
1}}总是如此。
答案 1 :(得分:2)
ctr
永远不会超过main
中的2,这就是为什么它是无限循环。
每次print_sign2()
,它都会设置ctr = 2
的值。
答案 2 :(得分:0)
不要将全局变量用作循环控制变量。这只是糟糕的编程习惯。改为使用局部变量。
使用局部变量进行循环控制可以完全避免这些问题。
#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);
}