2016-10-10 4 views
-2

Так что я делал свои задачи с проблемами cs50, и я застрял в правильном выравнивании символов на моем выходе.Правое выравнивание символа '#' в C

Код для моей программы (mario.c) является:

#include<stdio.h> 

int main(void) 
{ 
    int height=-1; 

    while(height<0 || height>23) 
    { 
     scanf("%d",&height); 
     printf("height: %d\n",height); 
    } 

    for(int i=1; i<=height; ++i) 
    { 
     for(int j=1;j<=i+1;++j) 
     { 
      printf("#"); 
     } 
     printf("\n"); 
    } 
} 

Вот вывод, что я хочу:

Output (that i want)

и вывод, что я получаю:

Output (that i am getting)

Pleas помогите мне. Заранее спасибо.

+7

Напечатайте нужное количество мест в первую очередь. –

+0

Вместо того, чтобы зацикливать правильное количество пробелов и хэшей, вы можете поэкспериментировать с спецификациями ширины поля и точности, обозначенными звездочкой. Тем не менее это может быть вне сферы действия вашего задания. –

ответ

0

принтf пробел первый.

for(int i = 1; i <= height; ++i) 
{ 
    for (int k = 1; k <= height - i; ++k) 
     printf(" "); 
    for(int j = 1; j <= i + 1; ++j) 
    { 
     printf("#"); 
    } 
    printf("\n"); 
} 
0

Вы можете использовать sprintf, чтобы получить строку, которая содержит нужное количество # с, а затем распечатать его с помощью apropriate printf format specifiers как так:

for (int i = 1; i <= height; ++i) 
{ 
    char *buf = malloc(i + 2); 
    buf[i+1] = '\0'; 
    for (int j = 0; j < i + 1; j++) 
    { 
    sprintf(buf + j, "#"); // add a new # character after the last one 
    }  
    printf("%*s\n", height + 1, buf); 
    free(buf); 
} 

Что происходит? Давайте посмотрим на параметры printf.

"%*s"  // % means to start a placeholder 
      // * tells this placeholder to reserve at least as many 
      // characters as we tell it to via an variable 
      // s tells printf that this is a placeholder for a string 

height + 1 // reserver height + 1 character 

buf  // stores the correct ammount of # 
0

Добавить ширину в printf, чтобы вы могли распечатать правые данные выравнивания.

for(int i=1;i<=height;++i) 
{ 


    printf("%*c",(height + 1-i),'#'); //* to add width of size (height + 1-i) 

    for(int j=1;j<=i;++j) 
    { 

     printf("#"); 

    } 

    printf("\n"); 
} 
Смежные вопросы