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 |
输出:
1
2 3 4 5 6 7 8 9 10 11 |
hai
@hai ?hai hai hai 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) void foo(void) void koo() int main (void) |
更好的是,不要使用任何全局变量,因为这是不好的做法。使用循环并将计数器留给调用者:
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) void foo(void) void koo() int main (void) 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<i–2;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/