关于S1E28的动动手
本帖最后由 澈影 于 2020-2-10 20:23 编辑#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 != '@')
{
putchar(letters);
k++;
}
// 打印字母间的间隔(空格)
int temp = gap;
while (temp--)
{
putchar(' ');
}
}
putchar('\n');
}
return 0;
}
// 打印字母间的间隔(空格)
int temp = gap;
while (temp--)
{
putchar(' ');
}
为什么特地新弄一个temp,神奇的是我删去temp直接用gap--居然错了!!! 不懂你想问什么
int temp = gap;
while (temp--)
{
putchar('中');
}
把代码换成这个自己试 好吧。。。那我说清楚点
就直接while(gap--)的话是错误的。。。
这为啥啊 我还是直接全部拉出来把
#include<stdio.h>
#include<string.h>
const char *p[] = {
"\
\ # @\
\ ### @\
\ ## ## @\
\ ## ## @\
\## ### ##@\
\ ## ## @\
\## ##@\
",
"\
\ ####### @\
\## ##@\
\## @\
\ ####### @\
\ ##@\
\ ##@\
\ ####### @\
",
"\
\## ##@\
\### ##@\
\## # ##@\
\### ##@\
\## ###@\
\## # ##@\
\## ###@\
"
};
int main()
{
int i,j,l;
int part,Npart;
printf("输入间隔数;");
scanf("%d",&l);
for (i = 0;i < 7;i++)
{
for (j = 0;j < 3;j++)
{
int k = 0;
part = strlen(p)/7;
Npart = i*part;
while (p != '@')
{
putchar(p);
k++;
}
while (l--)
{
putchar(' ');
}
}
putchar('\n');
}
return 0;
我一开始是这么打的,然后乱码了
之后在
while (l--)
{
putchar(' ');
}
这段我改为
int gap = l;
while (gap--)才能打出来
刚好我也学到了这节课
我觉得小甲鱼的代码好复杂{:10_247:}我的可能好理解一点?就是偷偷用了后面的全局变量,简单来说就是把FISHC定义在所有函数外面,然后所有函数都能用了{:10_256:},不说了上代码
#include <stdio.h>
void FISHC(int);
void intake();
char *F = {"########","## ","## ","######","## ","## ","## "};
char *I = {"####"," ## "," ## "," ## "," ## "," ## ","####"};
char *S = {" ###### ","## ##","## "," ###### "," ##","## ##"," ###### "};
char *H = {"## ##","## ##","## ##","#########","## ##","## ##","## ##"};
char *C = {" ###### ","## ##","## ","## ","## ","## ##"," ###### "};
int main()
{
int n;
printf("请输入字母的间隔(空格数) :");
scanf("%u", &n);
if (n < 0)
printf("请输入大于0的间隔数!");
else {
FISHC(n);
}
return 0;
}
void FISHC(int n)
{
int i = 0;
for (i = 0; i < 7; i++)
{
printf("%s", F);
space(n);
printf("%s", I);
space(n);
printf("%s", S);
space(n);
printf("%s", H);
space(n);
printf("%s\n", C);
}
}
void space(int n)
{
int i = 0;
for (i = 0; i < n; i++)
printf(" ");
}
我的直觉告诉我,我找到问题了。gap--,如果gap原来是7,一个循环结束后,gap的值应该是-1,你下一次循环没有使gap等于7,也就是说你把gap值改变了,但却没有初始化。那么第2次循环他还会用-1。这就偏离了原来的意思。所以你需要一个临时变量来完成改变值的操作。当然只要方法对,其他的也可以。比如说,你依然可以使用gap--,但是你在一个循环结束之后,你要使gap变为原来的值。那么你可以使用一个新的变量a保存原来gap的值,在一个循环之后,令gap=a。然后再进行下一次循环,就没问题了。 召唤风云 发表于 2020-2-11 12:19
我的直觉告诉我,我找到问题了。gap--,如果gap原来是7,一个循环结束后,gap的值应该是-1,你下一次循环没有 ...
茅塞顿开啊,就是这个!谢了谢了
页:
[1]