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

這就是它應該看起來的樣子。我很困惑我做錯了什么,因為它只適用于 inputNumber 而不適用于 printTriangle。aeiou # # # 請對我放輕松,因為我對此還很陌生。
uj5u.com熱心網友回復:
分段錯誤是由不正確的格式字串引起的(%s 應該是 %c)。輸出格式不符合預期,因為內回圈條件錯誤,并且在列印每一行后(內回圈后)需要換行:
#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;
}
考慮使用型別unsigned而不是int負大小,行 ( i) 和列 ( j) 沒有意義。
這是一個替代的實作,printTriangle()它預先做了一些作業來生成最后一行,然后使用最后一行的前綴來列印所有行:
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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364034.html
標籤:C
