電子書籍の厳選無料作品が豊富!

このプログラムをテキストファイルから読み込ませたいのですが、
どう改良したらいいかわかりません。どなたかプログラムの追加を教えていたたけないでしょうか。

#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 ;
}

A 回答 (4件)

プログラムからファイルを読み込む方法はありますが、


ただそんなことしなくても、リダイレクトを使って

C:\>prog.exe < data.txt
(prog.exeというのはこのファイルをコンパイルしたexeファイル、
data.txtは読み込みたいファイル)

とすればできます。

これがだめならまた連絡ください。

この回答への補足

即レスありがとうございます。
実行した結果テキストファイルを読み込む事は成功致しました。
しかし、プログラム自体に問題があるらしく一行分だけ実行して終わってしまいます。
何行もあるテキストファイルを扱うプログラムにするにはどうすればいいのでしょうか。

お時間がありましたらまたよろしく御願いします。

補足日時:2004/10/16 15:43
    • good
    • 0

ファイルを開く


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);
    • good
    • 0
この回答へのお礼

具体例まで出していただき、ありがとうございました。
大変参考になりました。

お礼日時:2004/10/18 22:56

ファイルから読むには、


#1の様にする他
FILE *fp;
fopen("filename","r");
fgetc(fp);
feof(fp);
fclose(fp);
の様にファイル関係の関数を使います。

プログラムでは、行末コードがくるか、バッファが一杯になるまで、文字を読み込むようになっているので、1行しか処理できません。
#2で書かれているように、
ファイルの終了を調べて、繰り返し、読み込みするように改良しないといけないと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
参考になりました。

お礼日時:2004/10/18 22:55

私はまだこのプログラムを完全に理解していません。


だから不具合があるかもしれませんが、
いちおう以下の方法で何行も解析できるようになります。

(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だったかな…)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
参考になりました。

お礼日時:2004/10/18 22:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!