ファイル処理について
大学の課題なのですが、何度取り組んでもエラーになるため、間違いのご指摘、または正答を教えていただけないでしょうか。
問題は以下のものです。
【問題】
ファイルから整数を読み込み,その値によってfpの読み込み位置をかえ,何度目の読み込みで0を読み込んだかを表示するプログラムを作成せよ.
ファイルの内容の例
2,4,0,
fpの読み込み位置を変えるにはfseekという関数を利用する.
fseekの使い方:
現在の読み取り位置xだけずらすには,
fseek(ファイルポインタ, x, SEEK_CUR);
と記述する.
STEP
1 データを一区切りで読み取る("2,"や"-4,"などの整数とコンマの組)
2 読み取ったデータに応じてfpを移動させる("2,"なら2移動,"-4,"なら-4移動)
3 0を読むまで繰り返す
+++++*+++++fseek-exercise.c+++++*+++++
#include <stdio.h>
int main(void){
FILE *fp;
int c;
int i;
int count=0;
char filename[60];
printf("ファイル名 :"); scanf("%s",filename);
//ファイルを開く
//
(* ここに解答を書き加える *)
while(1){
printf("読み込み前 : %ld\n",ftell(fp));
//fpから値を読む
//
(* ここに解答を書き加える *)
printf("読み込んだ値は%dです\n",c);
printf("読み込み後 : %ld\n\n",ftell(fp));
//読み込み位置をずらす
//
(* ここに解答を書き加える *)
}
printf("%d回目です.",count);
fclose(fp);
return(0);
}
//
以上になります。
自分で作ったプログラムは以下のようになりました。
#include <stdio.h>
int main(void){
FILE *fp;
int c;
int i;
int count=0;
char filename[60];
printf("ファイル名 :"); scanf("%s",filename);
//ファイルを開く
//
fp = fopen(filename,"r");
if(fp == NULL){
printf("cannot open\n");
exit(1);
}
while(1){
printf("読み込み前 : %ld\n",ftell(fp));
//fpから値を読む
//
c = fgetc(fp);
printf("読み込んだ値は%dです\n",c);
printf("読み込み後 : %ld\n\n",ftell(fp));
//読み込み位置をずらす
//
if(c > '0' || c< '9'){
i = atoi(&c);
count++;
if(i == 0){
break;
}
fseek(fp,i,SEEK_CUR);
}
}
printf("%d回目です.",count);
fclose(fp);
return(0);
}
//
どこを訂正していいのかわかりません。
どうぞ、よろしくお願いいたします。
お礼
回答ありがとうございます。 動きましたか。謎です、、、 何か根本的な間違いをしているかもしれません。もう少し考えてみます。 どうもありがとうございました。