如何使用在C

时间:2019-01-22 21:10:19

标签: c printf

我正在尝试创建看起来像这样的东西:

mario stairs

我知道如何单独创建它们,但是我无法弄清如何使其并排... 我的代码当然是最重要的

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

}

输出是这样的

output

3 个答案:

答案 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)

您需要将顶部循环和底部循环合并为一个:

  1. 首先打印左空白。
  2. 然后在金字塔/三角形的左侧打印
  3. 打印分隔符
  4. 打印三角形的右侧
  5. 打印换行符。

重复以上内容以获取所需的行数。


这是已清理和更正的代码。请注意,为了方便[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;
}