C言語のファイル処理について
環境
OS:Windows VISTA Ultimate
コンパイラ:Borland C++ Compiler 5.5
Cの基礎的な勉強をしています。2つほど質問があります。
1つ目は、ファイル処理の勉強としてプログラムを作っているのですがファイルが上手く開けません。プログラムとしてはファイルを開いて、ファイル内に記述されている数値を取り出し、計算を行う簡単なものを作っています。ソースは以下のものになります。
#define N 256
int file_read(char filename[] , int count[])
{
int m;
FILE *fp;
fp=fopen(filename,"r");
if(fp==NULL)
{ /* オープン失敗 */
printf("Not Found File\n");
return -1; /* 戻り値-1 */
}
while((m = fgetc(fp)) != EOF)
{
読み取った数値配列に格納する処理
}
fclose(fp);
return 0;
}
int operation(int count[])
{
計算処理
return 0;
}
int main(void)
{
int *count[N];
char *filename[256];
memset(count, 0, sizeof(count)); /* 変数・配列初期化 */
printf("Please Input Filename:");
fgets(filename, sizeof(filename), stdin );
if(file_read(filename,count) != -1)
operation(count);
return 0;
}
バッファオーバーランの事を考え、fgetsによるキー入力にしたのですがファイルオープン失敗になってしまいます。fgetsのあと、変数filenameの中身を確認したところ、キー入力した文字はきちんと代入されていました。オープンするファイルはきちんとあるのですが・・。
fgetsをscanfに変えた場合は上手くいくので書式指定をしてscanfを使えばいいのでしょうが、なぜfgetsで上手くいかないでしょうか?
2つ目はgetchar()とfgets()に関してです。
while((c = getchar()) != EOF)
{
.
.処理
.
fgets(変数, sizeof(変数), stdin );
.
.処理
.
}
とした場合、fgetsの処理が無視されてしまいます。
これはどういったことが原因なのでしょうか。
ご教授、お願いいたします。
お礼
そうでしたそうでしたftell&fseekですね、久しぶりですっかり忘れていました。 ありがとうございました。