2014年3月31日月曜日

開発環境

C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅣ部(高度なプログラミング概念)の16章(ファイル入出力)、16.13(プログラミング実習)、実習 16-2.を解いてみる。

その他参考書籍

実習 16-2.

コード(BBEdit, Emacs)

sample306_2.cpp

#include <iostream>
#include <cstring>

int main(int argc, char *argv[])
{
  std::FILE *in_file;
  std::FILE *out_file;
  char ch;

  if (argc != 3) {
    std::cerr << "ファイル名を二つ指定してください\n";
    exit (8);
  }

  in_file = std::fopen(argv[1], "r");
  if (in_file == NULL) {
    std::cerr << "Error: Could not open " << argv[1] << '\n';
    exit (8);
  }

  out_file = std::fopen(argv[2], "w");
  if (out_file == NULL) {
    std::cerr << "Error: Could not open " << argv[2] << '\n';
    exit (8);
  }

  ch = std::fgetc(in_file);
  while (ch != EOF) {
    if (ch == '\t')
      std::fputs("        ", out_file);
    else
      std::fputc(ch, out_file);
    ch = std::fgetc(in_file);
  }

  std::fclose(in_file);
  std::fclose(out_file);
  
  return (0);
}

Makefile

#
# FSFのg++コンパイラ用のMakefile
#
CC=g++
CFLAGS=-g -Wall
all: sample306_2

sample306_2: sample306_2.cpp
 ${CC} ${CFLAGS} -o sample306_2 sample306_2.cpp

clean:
 rm sample306_2

入出力結果(Terminal)

$ make
g++ -g -Wall -o sample306_2 sample306_2.cpp
$ ./sample306_2
ファイル名を二つ指定してください
$ ./sample306_2 temp.txt 
ファイル名を二つ指定してください
$ ./sample306_2 temp.txt temp.out 
$ cat temp.txt 
 a bc  def  hijk
 a bc  def  hijk
$ cat temp.out 
 a        bc  def                hijk
        a bc                def  hijk
$ 

0 コメント:

コメントを投稿