我正在尝试创建看起来像这样的东西:
我知道如何单独创建它们,但是我无法弄清如何使其并排... 我的代码当然是最重要的
int answer = get_int("Height: ");
while( answer < 1 || answer > 8){
answer = get_int("Height: ");
}
int column = answer -1;
for(int i = 1; i <=answer; i++){
for(int j = 1; j <= column; j++){
printf(" ");
}
column--;
for(int k = 1; k <= i ; k++){
printf("#");
}
printf("\n");
}
for(int a = 1; a <=answer; a++){
for(int b = 1; b <=a; b++){
printf("#");
}
printf("\n");
}
}
输出是这样的
答案 0 :(得分:0)
我不理解您的代码,因为它缺少一些要编译的关键元素(main
在哪里?get_int
在哪里?)。
但是,这是我的方法:
#include <stdio.h>
#define HEIGHT 6
void print_whitespace(int n){printf("%*c", n, ' ');}
void print_hash(int n){while(n--) printf("#");}
int main(void) {
for(int h = 1; h < HEIGHT ; h++)
{
print_whitespace(HEIGHT - h); // left side whitespaces
print_hash(offset); // left side '#'
print_whitespace(1); // center whitespace
print_hash(offset); // right side '#'
print_whitespace(HEIGHT - h); // right side whitespaces
printf("\n");
}
return 0;
}
答案 1 :(得分:0)
您需要将顶部循环和底部循环合并为一个:
重复以上内容以获取所需的行数。
这是已清理和更正的代码。请注意,为了方便[my]调试,我将其更改为从第一个程序参数(例如./mypgm 4
)中获取计数:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
int answer;
--argc;
++argv;
if (argc != 1)
exit(1);
answer = atoi(*argv);
int column = answer - 1;
for (int i = 1; i <= answer; i++) {
// print left margin
for (int j = 1; j <= column; j++)
printf(" ");
// print left pyramid
for (int k = 1; k <= i; k++)
printf("#");
// print separater
printf(" ");
// print right pyramid
for (int a = 1; a <= i; a++)
printf("#");
column--;
printf("\n");
}
return 0;
}
答案 2 :(得分:0)
%s
说明符的width和precison字段可用于打印图像。
宽度字段将至少打印所需数量的字符,而精度字段将最多打印所需数量的字符。可以在说明符中使用值,也可以使用星号从参数中获取值。
输入重复行的次数将确定左侧字段的宽度。在每次迭代中,字段中要打印的字符数都会提高精度。
右侧只需要打印与左侧相同数量的字符。
#include <stdio.h>
#define SIZE 8
int main( void) {
char hash[SIZE + 1] = { [0 ... SIZE] '#'};
char input[100] = "";
int repeat = 0;
int result = 0;
do {
printf ( "input height [1 to %d]\n", SIZE);
if ( fgets ( input, sizeof input, stdin)) {//get a line
result = sscanf ( input, "%d", &repeat);//try to scan an integer
}
else {
fprintf ( stderr, "fgets EOF\n");
return 0;
}
} while ( 1 != result || repeat <= 0 || repeat > SIZE);
for ( int each = 0; each < repeat; ++each) {
printf ( "%*.*s %.*s\n", repeat, each + 1, hash, each + 1, hash);
}
return 0;
}