![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
このプログラムをテキストファイルから読み込ませたいのですが、
どう改良したらいいかわかりません。どなたかプログラムの追加を教えていたたけないでしょうか。
#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 ;
}
No.1ベストアンサー
- 回答日時:
プログラムからファイルを読み込む方法はありますが、
ただそんなことしなくても、リダイレクトを使って
C:\>prog.exe < data.txt
(prog.exeというのはこのファイルをコンパイルしたexeファイル、
data.txtは読み込みたいファイル)
とすればできます。
これがだめならまた連絡ください。
この回答への補足
即レスありがとうございます。
実行した結果テキストファイルを読み込む事は成功致しました。
しかし、プログラム自体に問題があるらしく一行分だけ実行して終わってしまいます。
何行もあるテキストファイルを扱うプログラムにするにはどうすればいいのでしょうか。
お時間がありましたらまたよろしく御願いします。
No.4
- 回答日時:
ファイルを開く
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);
No.3
- 回答日時:
ファイルから読むには、
#1の様にする他
FILE *fp;
fopen("filename","r");
fgetc(fp);
feof(fp);
fclose(fp);
の様にファイル関係の関数を使います。
プログラムでは、行末コードがくるか、バッファが一杯になるまで、文字を読み込むようになっているので、1行しか処理できません。
#2で書かれているように、
ファイルの終了を調べて、繰り返し、読み込みするように改良しないといけないと思います。
No.2
- 回答日時:
私はまだこのプログラムを完全に理解していません。
だから不具合があるかもしれませんが、
いちおう以下の方法で何行も解析できるようになります。
(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だったかな…)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バイナリファイルをテキストフ...
-
巨大なテキストファイル(可変...
-
ファイル内のデータを1行削除...
-
【VB.Net】バイト型配列に読み...
-
C言語での改行コードの扱いにつ...
-
テキストファイルの行数を取得...
-
改行までの一文字ずつのファイ...
-
fgetsで2行目から文字化け
-
VBSで指定行に挿入
-
ハフマン符号のプログラム
-
freadとfwrite
-
C言語初心者の質問失礼します。
-
フルパスから最後のディレクト...
-
FTPでputすると空ファイルが出...
-
windows.hがincludeされない
-
バッファとは何ですか
-
Access クエリ実行が急に非常に...
-
どんなプログラムを書いても指...
-
OLE又はDDEを使うVISUAL BESIC...
-
Acccess レポートをグループ別...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
fgetsで2行目から文字化け
-
VBSで指定行に挿入
-
テキストファイルの行数を取得...
-
c言語 2つのファイルを行ご...
-
改行までの一文字ずつのファイ...
-
freadとfwrite
-
fopenで開いたファイルのサイズ...
-
続・EOF判定されない
-
テキストファイルの文字列の削除
-
巨大なテキストファイル(可変...
-
ファイルサイズ指定し、ファイ...
-
fprintfで出力するファイルのパ...
-
ハフマン符号のプログラム
-
winsock recvでの文字化け
-
0x00をファイル出力
-
複数テキストファイルを読み込...
-
C言語でのtxt検索
-
VC++6でfgets関数の変わりにな...
おすすめ情報