2016-07-08 6 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'; 

は差が1〜2対サイン "に等しい" された状態で

string[c] = '\n'; 

する必要があります。

理由は、「==」は真または偽のいずれかを評価する条件演算子であり、「=」は値を変数に設定する代入演算子であるからです。

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

関連する問題