首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用空格打印函数的输入和出口

用空格打印函数的输入和出口
EN

Stack Overflow用户
提问于 2017-01-16 08:30:12
回答 3查看 62关注 0票数 0

我尝试了下面的代码打印函数入口(foo)和退出(koo)。但它在执行时会给出随机符号。

代码语言:javascript
复制
#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;
}

输出

代码语言:javascript
复制
hai
@hai
�hai
hai
hai

haikoo
haikoo
haikoo
haikoo
haikoo

我想要输出

代码语言:javascript
复制
hai
  hai
    hai
      hai
        hai
        haikoo
      haikoo
    haikoo
  haikoo
haikoo

我怎么才能拿到呢?我在哪里搞错了?它用于函数调用和函数退出的图形表示。这只是一个示例程序,我正在使用Linux中的gcc进行编译。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-16 08:36:17

您正在修改空格' '字符的符号值,而不是空格的数量。要获得所需的输出,需要一个计数器变量。

例如:

代码语言:javascript
复制
// 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;
}

更好的是,不要使用任何全局变量,因为这是糟糕的做法。使用循环并将计数器留给调用者:

代码语言:javascript
复制
// 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;
}
票数 3
EN

Stack Overflow用户

发布于 2017-01-16 08:36:30

char spa=' ';是一个人物。C中的字符是一个完整的数据类型。因此,spa *=2;将字符值乘以2,它不会将字符连在一起形成一个两倍大的字符串。

票数 1
EN

Stack Overflow用户

发布于 2017-01-16 08:46:31

代码语言:javascript
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41672168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档