关于C#:带空格的打印函数进出 | 珊瑚贝

Printing function entry and exit with spaces


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
char spa=‘ ‘;
void foo()
{
    printf(“hai”);
    spa*=2;
    printf(\
%c”
,spa);
}
void koo()
{
    spa/=2;
    printf(“%c\
,spa);
    printf(“haikoo”);
}
int main()
{
  foo();
  foo();
  foo();
  foo();
  foo();
  koo();
  koo();
  koo();
  koo();
  koo();
  return 0;
}

输出:

1
2
3
4
5
6
7
8
9
10
11
hai
@hai
?hai
hai
hai

haikoo
haikoo
haikoo
haikoo
haikoo

我想输出为

1
2
3
4
5
6
7
8
9
10
hai
  hai
    hai
      hai
        hai
        haikoo
      haikoo
    haikoo
  haikoo
haikoo

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

  • spa*=2; 不会做你(可能)认为它会做的事情。
  • @MartinR那怎么办?


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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 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\
);
}

void koo()
{
  print_spaces(count);
  printf(“haikoo\
);
}

int main (void)
{
  foo();
  foo();
  foo();
  foo();
  foo();
  koo();
  koo();
  koo();
  koo();
  koo();
  return 0;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 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\
);
}

void koo()
{
  printf(“haikoo\
);
}

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;
}

  • Nitpick,但是对于打印空格,printf 调用不是一个繁重的函数吗?
  • @StoryTeller 确实。事实上,在生产代码中应该避免使用整个 stdio.h。但这没什么初学者需要担心的。


char spa=’ ‘; 是字符。 C 中的字符是一种整数数据类型。所以 spa *=2; 将字符值乘以 2。它不会将字符连接到自身以形成两倍大的字符串。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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\
);
        i+=2;
}
void koo()
{
        for(int j=0;j<i2;j++)
            printf(“%c”,spa);
        printf(“haikoo\
);
        i-=2;
}
int main()
{
  foo();
  foo();
  foo();
  foo();
  foo();
  koo();
  koo();
  koo();
  koo();
  koo();
  return 0;
}
  • 请考虑添加一些关于如何解决问题的讨论!另外,尝试以一致的方式缩进你的代码!


来源:https://www.codenong.com/41672168/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_8980.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?