開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料、light版)
- 言語: C
- コンパイラ: UNIX ccコンパイラ (汎用UNIX)
『実践プログラミング 第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 コメント:
コメントを投稿