ページ 11

c言語 指定文字数で改行する

Posted: 2014年6月16日(月) 19:10
by goma
/*--------test.c-------*/

コード:

#include<stdio.h>
#include<stdlib.h>
#define N 256

int main()
{
    FILE *fp;
    char *filename = "test.txt";
    int s,p;
    int i = 0;
    
    //ファイルオープン処理
    if((fp = fopen(filename, "r"))==NULL) {
      fprintf(stderr,"%sのオープンに失敗.\n",filename);
      exit(1);
    }
    
    //以下テキスト整形処理
    
    printf("1行の文字数を指定してください\n");
    scanf("%d", &p);
      
  while((s = fgetc(fp)) != EOF){
    if(s == '\n'){ //読み込んだ文字列が改行文字だった場合はiを初期化
      i=0;
    }
    if(s==' ' && i>p-1){ //読み込んだ文字列が空白文字で、かつ1行が30文字を越している場合
      printf("\n");
      i=0;
    }    
      putchar(s);
      i++;
    }
    printf("\n");
    fclose(fp);
    
    return 0;
}

/*--------test.txt---------*/

コード:

A temple like that of Olympia was surrounded by statues of
victorious athletes dedicated to the gods .

結果としては、
A temple like that of Olympia was
[space]surrounded by statues of
victorious athletes dedicated
[space]to the gods .




こうなってしまいます。
[space]は半角スペースだとお考え下さい。
改行をしたあとにスペースが入ってしまうのが気になります。

改善の仕方が分からないので、お力をお貸しください。。

Re: c言語 指定文字数で改行する

Posted: 2014年6月16日(月) 21:42
by みけCAT
27~32行目を

コード:

    if(s==' ' && i>p-1){ //読み込んだ文字列が空白文字で、かつ1行がp-1文字を越している場合
      printf("\n");
      i=0;
    } else {
      putchar(s);
      i++;
    }
としてみてください。
インデントも整えたほうがいいでしょう。

Re: c言語 指定文字数で改行する

Posted: 2014年6月16日(月) 21:42
by 初級者
その行の何文字目かをカウントしておき、
先頭かつブランクならば出力しない
というロジックを入れればいいと思います。

Re: c言語 指定文字数で改行する

Posted: 2014年6月17日(火) 08:20
by goma
なんと・・
ちょっとしたことだったのですね・・・。
勉強不足でした。
ありがとうございました!