易百教程

使用嵌套的for循环来画框形

以下代码输出一个具有固定高度和宽度的框。
第一步是定义指定宽度和高度的字符数的变量:

unsigned int width = 0;
unsigned int height = 0;

可以定义表示框的最小尺寸值的变量:

const unsigned int MIN_SIZE = 3; // 最小宽度和高度值

可以输入下一个宽度和高度:

printf("输入宽度和高度的值 (至少 %u):", MIN_SIZE);
scanf("%u%u", &width, &height);

下面是完整的程序:

#include <stdio.h>

int main(void)
{
  const unsigned int MIN_SIZE = 3; // 最小宽度和高度值
  unsigned int width = 0;
  unsigned int height = 0;

  // 读入所需的宽度和高度
  printf("输入宽度和高度的值 (至少 %u):", MIN_SIZE);
  scanf("%u%u", &width, &height);
  // 验证宽度和高度值
  if (width < MIN_SIZE)
  {
    printf("\n宽度 %u 的值太小,重新设置为:%u.\n", width, MIN_SIZE);
    width = MIN_SIZE;
  }
  if (height < MIN_SIZE)
  {
    printf("\n高度 %u 的值太小,重新设置为:%u.\n", height, MIN_SIZE);
    height = MIN_SIZE;
  }
  // 输出带有宽度星号的盒子顶部
  for (unsigned int i = 0; i < width; ++i)
    printf("*");

  // 输出 height - 2行宽度字符,每端有 *,内部有空格
  for (unsigned int j = 0; j < height - 2; ++j)
  {
    printf("\n*"); // 第一个星号

    // 接下来打印空格
    for (unsigned int i = 0; i < width - 2; ++i)
      printf(" ");

    printf("*"); //  最后一个星号

  }
  // 输出框的底部
  printf("\n");// 开始一个新行
  for (unsigned int i = 0; i < width; ++i)
    printf("*");

  printf("\n"); // 最后一行末尾的换行符
  return 0;
}

执行上面示例代码,得到以下结果:

hema@ubuntu:~/book$ gcc main.c
hema@ubuntu:~/book$ ./a.out
输入宽度和高度的值 (至少 3):4 2

高度 2 的值太小,重新设置为:3.
****
*  *
****