2014-10-03 3 views
-3

문자열 배열을 삼각형으로 인쇄하는 프로그램을 만들려고합니다. 나는 온라인으로 보았고 숫자 배열로만 이것을 찾을 수 있으며 코드를 작성할 때 아래 출력과 같이 세로줄로 인쇄됩니다. 나는 프로그래밍에 익숙하지 않기 때문에 친절합니다. 나는 삼각형 의이 유형을 찾고 있어요.C에서 문자열 배열의 문자 '삼각형'을 인쇄하십시오

#define CHAR 25 


main() 
{ 
char string[CHAR] = ""; 
int i = 0, k = 0, j = 0; 

printf("Please enter your name\n"); 
printf("**********************\n\n"); 
fgets(string, CHAR, stdin); 
puts(string); 
pause; 
cls; 

for (i = 1; i <= CHAR; i++)//start of triangle 
{ 
    for (j = 1; j < i; j++) 
     printf(" "); 
    for (k = i; k <= CHAR; k++){ 
     printf("%c ", string[i]); 
     printf("\n"); 
    } 

}//end of triangle 

내가 가장 가능성이 그런 바보 같은 질문에 대한 나쁜 평가를 얻을 것이다 그러나 어떤 방향이 좋을 것 :

m y n a m 
e i s b 
    r a n 
    d o 
    n 

내 코드는 다음입니다. "어이 바보가 왜 이러는거야?"라고하는 모든 도움 덕분에!

여기 문자열 이름 즉 출력

입니다 것은 '톰'이다

출력 :

o 
o 
o 
o 
o 
m 
m 
m 
m 

후 일시 정지 위의 이상한 기호 문자. 나는 사진을 게시 할 수 없지만 외관상으로는 이것은 이것이 보여주는 것입니다.

+1

출력이 어떻게 생깁니 까? 그리고 그것은'int main (void)'입니다. –

+1

컴파일 문제 일 경우 컴파일러에서 얻은 오류를 공유하십시오 (나는 의심의 여지가 없습니다). – Jendas

+1

* for (j = i; j

답변

1

올바른 트랙에있는 것처럼 보이지만 코드에 몇 가지 문제가 있습니다. 먼저 올바른 변환 지정자를 사용하려면 printf man pages을 참조하십시오. 일반적으로 형식 문자열이 인수와 일치하지 않으면 undefined behavior입니다. 다음과 같이 두 가지 위치에서 변경해야합니다. 을 처리 중이므로

%d%zu이어야합니다.

printf("The size of the string is %zu\n", strlen(string)); 

그리고 문자열이 아닌 문자를 인쇄하려고합니다.

printf("%c ", string[i]); 

또한 int 형식이 아닌 char 형식의 배열에 액세스하려고합니다. 해당 선언 변경 :

char string[CHAR] = ""; int i = 0, k = 0, j = 0; 

이제 문제를 해결하십시오. 첫째, 잠재적으로 공백이있는 문자열을 읽었지 만 이것을 고려하지는 않습니다. 다소 비효율적 인 방법은 삼각형을 인쇄하기 전에 문자열에서 공백을 제거하는 것입니다.

if (string[j] == ' ') 
// don't print them 

것은 둘째로, 당신의 외부 루프가 경계 배열 액세스 중 잠재적 제공 :

:

for (i = 1; i <= CHAR; i++)//start of triangle 
{ 

이상 - 단순화 된 접근 방식처럼 보일 수 있습니다 더 좋은 방법은 그 공백, 예를 무시하는 것입니다

int line_width = 6; 

for (i = 0; i < line_width; i++) 
{ 
    for (s = 0; s < i; ++s) 
     printf(" "); 
    for (k = i; k < line_width - 1; ++k) 
    { 
     if (string[j] == ' ') 
      ++j; 
     printf("%c ", string[j]); 
     ++j; 
    } 
    printf("\n"); 
} 
+0

'size_t '의 올바른 형식은'% zu'가 아니고'% zd'입니다. 이것은 부호없는 유형입니다. –

+0

@Jen 정정에 감사드립니다. –

관련 문제