以下代码输出一个具有固定高度和宽度的框。
第一步是定义指定宽度和高度的字符数的变量:
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.
****
* *
****