2016-07-08 4 views
1

Ti-89 계산기의 줄 바꾸기로 공간을 만들려고합니다. 그래서 가로 문자 길이 때문에 줄이 잘리지 않고 인쇄 할 수 있습니다. 그들은 일반적으로 너무줄 바꿈으로 공간 바꾸기

This is a pretty long test 
ing for the Ti89 Calculator 

과 같을 것이다 나는 그들과 같이하고 싶습니다 그래서

This is a pretty long 
testing for the Ti89 
Calculator 

이 코드

void _print_line(char* string) 
{ 
     int k = strlen(string); 
     if(k > 26) 
     { 
       int n = 0; 
       int c = 25; 
       while(n == 0) 
       { 
         if(string[c] == 32) 
         { 
           n = 1; 
         } 
         else 
         { 
           c--; 
         } 
         if(c <= 0) 
         { 
           n = 2; 
         } 
       } 
       if(n == 1) 
       { 
         string[c] == '\n'; 
       } 
     } 
     printf("%s\n", string); 
} 

함께하려고 노력하지만, 그냥 무시하는 것 첫 번째 예와 같이 인쇄하십시오.

+3

하지 문제가 있지만, 가독성 (휴대 성)에 대한'경우 (문자열 [C] == '')'에''경우 ([C] == 32 문자열)을 변경하십시오 . –

+0

OT :'strlen()'은'int'가 아니라'size_t'를 반환합니다. – alk

답변

3

캐리지 리턴을 삽입하지 않습니다. 말했다 틸로

는 캐리지 리턴을 삽입하지 않는, string[c] = '\n';

0

으로 string[c] == '\n';

를 교체합니다. 라인

string[c] == '\n'; 

한 두 대에 서명 "동일"인 차이로

string[c] = '\n'; 

할 필요가있다.

"=="은 true 또는 false로 평가되는 조건부 연산자이고 "="는 값을 변수로 설정하는 할당 연산자이기 때문입니다.

0

전체 문자열에 대해 처리해야합니다.

다음 단어를 출력 할 때 지정된 너비를 초과하는지 확인하기 위해 현재 출력 문자 위치를 기록하십시오. 이 같은
:

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

#define DISP_OUT stdout 
#define DISP_WIDTH 26 

int disp_one(char ch){ 
    static int pos; 
    fputc(ch, DISP_OUT); 
    if(ch == '\n') 
     pos = 0; 
    else 
     ++pos; 
    if(pos == DISP_WIDTH){ 
     fputc('\n', DISP_OUT); 
     pos = 0; 
    } 
    return pos; 
} 

typedef enum word_break { 
    KEEP, BREAK 
} WORD_BREAK; 

void disp(const char *str, WORD_BREAK word_break){ 
    static int pos; 

    switch(word_break){ 
    case BREAK: 
     while(*str){ 
      pos = disp_one(*str++); 
     } 
     break; 
    case KEEP: 
     while(*str){ 
      if(isspace((unsigned char)*str)){ 
       pos = disp_one(*str++); 
       continue; 
      } 
      const char *end = str;//end : word end (find delimiter) 
      while(*end && !isspace((unsigned char)*end)) 
       ++end; 

      int len = end - str;//length of next output word 
      if(pos + len >= DISP_WIDTH && len < DISP_WIDTH){ 
       pos = disp_one('\n'); 
      } 
      while(str < end){ 
       pos = disp_one(*str++); 
      } 
     } 
     break; 
    } 
} 

int main(void){ 
    char *text = "This is a pretty long testing for the Ti89 Calculator"; 

    disp(text, BREAK); 
    disp("\n", BREAK); 
    disp(text, KEEP); 
    return 0; 
} 
+0

[DEMO] (http://ideone.com/NJUcy1) – BLUEPIXY

관련 문제