2012年5月13日日曜日

開発環境

『実践プログラミング 第3版』 (Steve Oualline (著)、 望月 康司 (監修) (翻訳)、 谷口 功 (翻訳)、 オライリー・ジャパン、1998年、ISBN978-4900900646) の14章(ファイル入出力)14.2(変換ルーチン)設問14-1を解いてみる。

設問14-1.

まずエラーのときファイル名が出力されるように修正。

コード(TextWrangler)

#include <stdio.h>
#include <stdlib.h>

int main(){
  char name[100];
  FILE *in_file;
  
  printf("Name? ");
  fgets(name,sizeof(name),stdin);
  
  in_file = fopen(name, "r");
  if(in_file == NULL){
    fprintf(stderr, "Error: Unable to input file '%s'\n",name);
    exit (8);
  }
  printf("File found\n");
  fclose(in_file);
  return (0);
}

入出力結果(Terminal)

a$ cc -g -o sample sample.c
$ ./sample
Name? sample
Error: Unable to input file 'sample
'
$

fgetsで改行文字まで読み取るのが原因みたい。ということで、<string.h>も読み込んで、strlenを使って末尾の改行文字を\0に変更してみる。

コード(TextWrangler)

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

int main(){
  char name[100];
  FILE *in_file;
  
  printf("Name? ");
  fgets(name,sizeof(name),stdin);
  name[strlen(name) - 1] = '\0';
  in_file = fopen(name, "r");
  if(in_file == NULL){
    fprintf(stderr, "Error: Unable to input file '%s'\n",name);
    exit (8);
  }
  printf("File found\n");
  fclose(in_file);
  return (0);
}

入出力結果(Terminal)

$ cc -g -o sample sample.c
$ ./sample
Name? sample
File found
$ ./sample
Name? sample.c
File found
$ ./sample
Name? kamimura
Error: Unable to input file 'kamimura'
$ ./sample
Name? javascript
Error: Unable to input file 'javascript'
$ 

とりあえず上手くいったけど、まだ文字列、配列の扱いに慣れてないかも。。

0 コメント:

コメントを投稿