这个是咋搞的
#include <stdio.h>#include <string.h>
#define HEIGHT 7// 根据下面定义,每个字母高度均是7行
const char *letters[] = {
"\
\########@\
\## @\
\## @\
\######@\
\## @\
\## @\
\## @\
",
"\
\####@\
\ ## @\
\ ## @\
\ ## @\
\ ## @\
\ ## @\
\####@\
",
"\
\ ###### @\
\## ##@\
\## @\
\ ###### @\
\ ##@\
\## ##@\
\ ###### @\
",
"\
\## ##@\
\## ##@\
\## ##@\
\#########@\
\## ##@\
\## ##@\
\## ##@\
",
"\
\ ###### @\
\## ##@\
\## @\
\## @\
\## @\
\## ##@\
\ ###### @\
"
};
//这个反斜杠就很懵了
int main()
{
int i, j;
int gap;
printf("请输入字母的间隔(空格数):");
scanf("%d", &gap);
// 一行一行打印
for (i = 0; i < HEIGHT; i++)
{
// 打印所有字母的某一行
for (j = 0; j < 5; j++)
{
// k 用于迭代每一行的‘#’字符
int k = 0;
// 计算出该字母每一行有多少个字符
int len = strlen(letters) / HEIGHT; //这个没补空格,按理来说每一行的字符应该是不一样的才对哇
// 计算当前打印第几行
int line = i * len;
// @标志着该行结束
while (letters != '@') //他不是有7行么,这个j为啥<5,这个循环有点没懂
{
putchar(letters);
k++;
}
// 打印字母间的间隔(空格)
int temp = gap;
while (temp--)
{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
//但是这个课后题运行出来是对的 本帖最后由 liuzhengyuan 于 2020-4-21 15:11 编辑
反斜杠表示“这语句太长了,我要分两行(或多行)写”
在for 循环中判断如果遇到 @ 符号,就换行
还有啊,那个补空格是和输出 “#” 运行完毕之后运行的,所以不需要算上补空格的字符数(补空格就是美观吧)
关于那个 j<5; 5 是宽度!不是高度,(7 是高度)(它是两个 for 嵌套,就像输出二维数组那样子)
就是这样啊:
请输入字母的间隔(空格数):3
######## #### ###### ## ## ######
## ## ## ## ## ## ## ##
## ## ## ## ## ##
###### ## ###### ######### ##
## ## ## ## ## ##
## ## ## ## ## ## ## ##
## #### ###### ## ## ###### 反斜杠用于长字符串多行书写。一个字符串若写在同一行会显得太长的话,就可以在适当的位置插入一个反斜杠,然后将剩下的部分写在下一行。例如,在这个程序中,这五个字母(FISHC)都是一个长字符串,用多个反斜杠将每个字母分别分成了多行
j不是行数,是字母个数(fishc五个字母)
外层for循环是逐行打印,一共七行
内层for循环是打印每个字母的一行 sunrise085 发表于 2020-4-21 15:09
反斜杠用于长字符串多行书写。一个字符串若写在同一行会显得太长的话,就可以在适当的位置插入一个反斜杠, ...
while (letters != '@')
{
putchar(letters); //这个指针数组还可以这样表示的么
k++;
} liuzhengyuan 发表于 2020-4-21 14:55
反斜杠表示“这语句太长了,我要分两行(或多行)写”
在for 循环中判断如果遇到 @ 符号,就换行
while (letters != '@')
{
putchar(letters); //这个指针数组还可以这样表示的么
k++;
} 孤世星辰 发表于 2020-4-21 20:49
指针数组有时可以写作二维数组
页:
[1]