- ベストアンサー
テキストファイルから読み込ませたい
このプログラムをテキストファイルから読み込ませたいのですが、 どう改良したらいいかわかりません。どなたかプログラムの追加を教えていたたけないでしょうか。 #include <stdio.h> int main() { int i,key,len,num ; char str[256],*ptr[128] ; num = 0 ; len = 0 ; ptr[0] = str ; do { key = getchar(); str[len] = (char)key ; if ( key == ' ' || key == '.' || key == ',' || key == '!' || key == '?' || key == '"' || key == 0x0a || key == 0x0d ){ str[len] = '\0' ; if ( str+len-ptr[num] ){ num ++ ; } ptr[num] = str+len+1 ; if( key=='.' || key== '!' || key=='?' || key=='"'){ str[++len]=(char)key; str[++len]='\0'; ptr[++num]=&str[len+1]; } } len ++ ; } while ( key != 0x0a && key != 0x0d && len < 255 ); str[255] = '\0' ; for (i=0 ;i<num ;i++){ printf("%d. %s\n",i+1,ptr[i]); } return i ; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
プログラムからファイルを読み込む方法はありますが、 ただそんなことしなくても、リダイレクトを使って C:\>prog.exe < data.txt (prog.exeというのはこのファイルをコンパイルしたexeファイル、 data.txtは読み込みたいファイル) とすればできます。 これがだめならまた連絡ください。
その他の回答 (3)
- JaritenCat
- ベストアンサー率37% (122/322)
ファイルを開く FILE *fp; if ((fp=fopen("test.txt","r"))==NULL) { return -1; } 1文字読む key = getchar(); を key = fgetc(fp); に変更 ファイルの終わりまで } while ( key != 0x0a && key != 0x0d && len < 255 ); を } while ( key != EOF && len < 255 ); に変更 ファイルを閉じる fclose(fp);
お礼
具体例まで出していただき、ありがとうございました。 大変参考になりました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ファイルから読むには、 #1の様にする他 FILE *fp; fopen("filename","r"); fgetc(fp); feof(fp); fclose(fp); の様にファイル関係の関数を使います。 プログラムでは、行末コードがくるか、バッファが一杯になるまで、文字を読み込むようになっているので、1行しか処理できません。 #2で書かれているように、 ファイルの終了を調べて、繰り返し、読み込みするように改良しないといけないと思います。
お礼
ご回答ありがとうございました。 参考になりました。
- liar_adan
- ベストアンサー率48% (730/1515)
私はまだこのプログラムを完全に理解していません。 だから不具合があるかもしれませんが、 いちおう以下の方法で何行も解析できるようになります。 (1)もうひとつdo{を付け加える。num = 0 ;の上。 do { num = 0 ; ... (2)getchar()のあとに以下を付け加える。 if(key == EOF){ str[len] = '\0' ; break; } (3)以下を付け加える。returnの前。 }while (key != EOF); なお、キーボードから入力するとき、終わらせるには Ctrlキー押しながらZを押します。そしてエンターキーを押します。 (LinuxなどだとZじゃなくてMだったかな…)
お礼
ご回答ありがとうございました。 参考になりました。
補足
即レスありがとうございます。 実行した結果テキストファイルを読み込む事は成功致しました。 しかし、プログラム自体に問題があるらしく一行分だけ実行して終わってしまいます。 何行もあるテキストファイルを扱うプログラムにするにはどうすればいいのでしょうか。 お時間がありましたらまたよろしく御願いします。