我尝试了下面的代码打印函数入口(foo)和退出(koo)。但它在执行时会给出随机符号。
#include <stdio.h>
char spa=' ';
void foo()
{
printf("hai");
spa*=2;
printf("\n%c",spa);
}
void koo()
{
spa/=2;
printf("%c\n",spa);
printf("haikoo");
}
int main()
{
foo();
foo();
foo();
foo();
foo();
koo();
koo();
koo();
koo();
koo();
return 0;
}输出
hai
@hai
�hai
hai
hai
haikoo
haikoo
haikoo
haikoo
haikoo我想要输出
hai
hai
hai
hai
hai
haikoo
haikoo
haikoo
haikoo
haikoo我怎么才能拿到呢?我在哪里搞错了?它用于函数调用和函数退出的图形表示。这只是一个示例程序,我正在使用Linux中的gcc进行编译。
发布于 2017-01-16 08:36:17
您正在修改空格' '字符的符号值,而不是空格的数量。要获得所需的输出,需要一个计数器变量。
例如:
// naive solution
#include <stdio.h>
int count=0;
void print_spaces (int spaces)
{
for(int i=0; i<spaces; i++)
{
printf(" ");
}
}
void foo(void)
{
print_spaces(count++);
printf("hai\n");
}
void koo()
{
print_spaces(--count);
printf("haikoo\n");
}
int main (void)
{
foo();
foo();
foo();
foo();
foo();
koo();
koo();
koo();
koo();
koo();
return 0;
}更好的是,不要使用任何全局变量,因为这是糟糕的做法。使用循环并将计数器留给调用者:
// good solution
#include <stdio.h>
int count=0;
void print_spaces (int spaces)
{
for(int i=0; i<spaces; i++)
{
printf(" ");
}
}
void foo(void)
{
printf("hai\n");
}
void koo()
{
printf("haikoo\n");
}
int main (void)
{
for(int i=0; i<5; i++)
{
print_spaces(i);
foo();
}
for(int i=4; i>=0; i--)
{
print_spaces(i);
koo();
}
return 0;
}发布于 2017-01-16 08:36:30
char spa=' ';是一个人物。C中的字符是一个完整的数据类型。因此,spa *=2;将字符值乘以2,它不会将字符连在一起形成一个两倍大的字符串。
发布于 2017-01-16 08:46:31
#include <stdio.h>
char spa=' ';
static int i=0;
void foo()
{
int j=0;
for(j=0;j<i;j++)
printf("%c",spa);
printf("hai\n");
i+=2;
}
void koo()
{
for(int j=0;j<i-2;j++)
printf("%c",spa);
printf("haikoo\n");
i-=2;
}
int main()
{
foo();
foo();
foo();
foo();
foo();
koo();
koo();
koo();
koo();
koo();
return 0;
}https://stackoverflow.com/questions/41672168
复制相似问题