Home > Blockchain >  printTriangle with a e i o u #
printTriangle with a e i o u #

Time:11-23

#include <stdio.h>

int inputNumber();
void printTriangle(int size, char ch[]);

int main()
{
    char arr_char[] = {'a','e','i','o','u'};
    int number;
    number = inputNumber();
    printTriangle(number,arr_char);

    return 0;
}

int inputNumber()
{
    int size;
    printf("Input Size: ");
    scanf("%d",&size);
    printf("===\nTriangle Size is %d\n===\n",size);
    return size;
}

void printTriangle(int size, char ch[5])
{
    int i,j;
    for(i=0;i<size;i  )
    {
        for(j=0;j<size;j  )
        {
            if(j <= 4)
            {
                printf("%s ",ch[j]);
            }
            if(j > 4 )
            {
                printf("# ");
            }
        }
    }
}

enter image description here

This is what it supposed to look like. And I'm confused as what I did wrong because it only work with inputNumber but not with printTriangle. a e i o u # # # please go easy on me since I'm kinda new to this.

CodePudding user response:

The segmentation fault is caused by an incorrect format string (%s should be %c). The output format doesn't match expectations as the inner loop condition is wrong and you need a newline after you print each line (after inner loop):

#include <stdio.h>
#define LEN 5

int inputNumber() {
    int size;
    printf("Input Size: ");
    scanf("%d",&size);
    printf("===\nTriangle Size is %d\n===\n",size);
    return size;
}

void printTriangle(int size, char ch[]) {
    for(int i = 0; i < size; i  ) {
        for(int j = 0; j <= i; j  ) {
            printf("%c ", j < LEN ? ch[j] : '#');
        }
        printf("\n");
    }
}

int main() {
    char arr_char[LEN] = {'a','e','i','o','u'};
    int number;
    number = inputNumber();
    printTriangle(number,arr_char);
    return 0;
}

Consider using the type unsigned instead of int as negative size, row (i) and column (j) doesn't make sense.

Here is an alternatively implementation of printTriangle() that does a bit of work upfront to generate the last row, then use a prefix of that last row to print all rows:

void printTriangle(unsigned size, char ch[]) {
    // use malloc if size is large (say >4k),
    // or you don't want to use a variable length array (VLA)
    char str[2 * size]; 
    for(unsigned column = 0; column < size; column  ) {
        str[2 * column] = column < LEN ? ch[column] : '#';
        str[2 * column   1] = ' ';
    }
    for(unsigned row = 0; row < size; row  ) {
        printf("%.*s\n", 2 * row   1, str);
    }
}
  •  Tags:  
  • c
  • Related