举个简单例子:用二重循环输出1-100 数字;
当然我这里是举例子针对二重及以上的循环, 完全可以使用单循环,于是便飞快的完成了以下
代码:
如下就用C/C++举例。
C++代码(VS2008):
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
int j = 0;
int count = 0;
cout<<"Run Result:"<< endl;
for (;i<10;i++)
{
for (;j<10;j++)
{
count++;
cout<< "/t"<< count<<endl;
}
}
return 0;
}
Run Result:
1
2
3
4
5
6
7
8
9
10
观察运行结果并非是我们预想结果,经过分析调试最后明白:
i执行 i=0时,内循环j(j=0~10)内循环结束j=10内循环;
i = 1时,j=10;内循环被处理不再执行,直到i=10;退出循环模块,程序结束;
所以问题的关键就是内循环只有在i=0时,j=10时被执行;所以应当在每次外循环
开始或者每次内循环结束之时将内循环值清0;
C++正确代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
int j = 0;
int count = 0;
cout<<"Run Result:"<< endl;
for (i=0;i<10;i++)
{
for ( j=0 ; j<10; j++)//解决location1
{
count++;
cout<<"cout: " <<count <<endl;
}
cout<<"i= "<< i<< "j= "<< j<< endl;
//j = 0;// //解决location2
}
return 0;
}
Run Result:
cout: 1
cout: 2
cout: 3
cout: 4
cout: 5
cout: 6
cout: 7
cout: 8
cout: 9
cout: 10
i= 0j= 10
cout: 11
cout: 12
cout: 13
cout: 14
cout: 15
cout: 16
cout: 17
cout: 18
cout: 19
cout: 20
i= 1j= 10
cout: 21
cout: 22
cout: 23
cout: 24
cout: 25
cout: 26
cout: 27
cout: 28
cout: 29
cout: 30
i= 2j= 10
cout: 31
cout: 32
cout: 33
cout: 34
cout: 35
cout: 36
cout: 37
cout: 38
cout: 39
cout: 40
i= 3j= 10
cout: 41
cout: 42
cout: 43
cout: 44
cout: 45
cout: 46
cout: 47
cout: 48
cout: 49
cout: 50
i= 4j= 10
cout: 51
cout: 52
cout: 53
cout: 54
cout: 55
cout: 56
cout: 57
cout: 58
cout: 59
cout: 60
i= 5j= 10
cout: 61
cout: 62
cout: 63
cout: 64
cout: 65
cout: 66
cout: 67
cout: 68
cout: 69
cout: 70
i= 6j= 10
cout: 71
cout: 72
cout: 73
cout: 74
cout: 75
cout: 76
cout: 77
cout: 78
cout: 79
cout: 80
i= 7j= 10
cout: 81
cout: 82
cout: 83
cout: 84
cout: 85
cout: 86
cout: 87
cout: 88
cout: 89
cout: 90
i= 8j= 10
cout: 91
cout: 92
cout: 93
cout: 94
cout: 95
cout: 96
cout: 97
cout: 98
cout: 99
cout: 100
i= 9j= 10
结果正确!
所以在做for双重循环时候,最好不要先麻烦省掉第一个分号前面的域,虽然那样完全符合语
法,不要为了那几Byte空间和时间将其省去,这样会给带来很多不必要的麻烦,或者 让你
花常时间来调试,严重影响你工作的效率,所以作为优秀的程序员应该养成良好编写代码习
惯和风格,你会因此而收益良多。
就此打住,小弟也是偶遇此问题,特写成文章,供大家参考,如有错误请多指教!