7.16程序修复版本
第五版原书的代码是无法显示如下图的所示的。
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
代码使用了递归。
经过测试,修复代码如下:
#include <iostream> const int Len = 66; const int Divs = 6; void subdivide(char arr[], int low, int high, int level); int main(void) { char ruler[Len]; int i; for (i = 1; i < Len - 2; i++) ruler[i] = ' '; ruler[Len - 1] = '\n'; ruler[Len] = '\0'; int max = Len - 2; int min = 0; ruler[min] = ruler[max] = '|'; std::cout << ruler; for (i = 0; i <= Divs; i++) { subdivide(ruler, min, max, i); std::cout << ruler; for (int j = 1; j < Len - 2; j++) ruler[j] = ' '; // reset to blank ruler } return 0; } void subdivide(char arr[], int low, int high, int level) { if (level == 0) return; int mid = (high + low) / 2; arr[mid] = '|'; subdivide(arr, low, mid, level - 1); subdivide(arr, mid, high, level - 1); return; }