こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ファイルをオープンするときのエラー

C言語であるファイルにある数値を100ごとに合計して,ほかのファイルに書き出す。しかし,実行するとエラーでてきます。原因はわからないです。因みに,オープンしたいファイルをほかのディレクリに置いたら,ファイルが見付かりませんとのエラーがありました、WindowsのC言語でカレントディレクトリを探すときは何の関数を使えばいいでしょうか?
int main(void)
{
int i,k;
int num;
char filename[64],fileread[64],filewrite[64];
FILE *fp0,*fp1;
double sum1,sum2,sum3;
int *ch[3];
sum1=sum2=sum3=0.0;
printf("ファイル名を入力ください!\n");
scanf("%s",filename);
fprintf(stderr,"\n%s\n",filename);
sprintf(fileread,"C:\\%s.txt",filename);
fprintf(stderr,"%s\n",fileread);
sprintf(filewrite,"C:\\%s.csv",filename);
for (i=0;i<3;i++)
{
if ( (ch[i]=(int *)malloc(4*30))==NULL )
{
fprintf(stderr,"Cannot get memory <ch[%d]>.",i);
return -1;
}
}
fprintf(stderr,"%s\n",filewrite);
if ((fp0=fopen(fileread,"rb"))==NULL)
{
fprintf(stderr,"Cannot open file %s\n",fileread);
return 0;
}
fscanf(fp0,"%d", &num);
if((fp1=fopen(filewrite,"wb"))==NULL)
{
fprintf(stderr,"Cannot open file!%s\n",filewrite);
return 0;
}
for(i=0;i<50;i++)
{
fscanf(fp0,"%d %d %d",*(ch[0]),*(ch[1]),*(ch[2]));
}
for(i=0;i<num/100;i++)
{
for (k=0;k<100;k++)
{
fscanf(fp0,"%d %d %d",*(ch[0]),*(ch[1]),*(ch[2]));
if ( feof(fp0) != 0 ) break;
sum1=sum1+*(ch[0]);
sum2=sum2+*(ch[1]);
sum3=sum3+*(ch[2]);
}
fprintf(fp1,"%d %d %d\n",sum1,sum2,sum3);
}
fclose(fp0);
fclose(fp1);
return 0;
}

投稿日時 - 2006-07-05 19:14:32

QNo.2257624

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

>sprintf(fileread,"C:\\%s.txt",filename);
>sprintf(filewrite,"C:\\%s.csv",filename);

はCドライブのルートにあるファイルの指定です。

sprintf(fileread,"%s.txt",filename);
sprintf(filewrite,"%s.csv",filename);

でカレントディレクトリです。

投稿日時 - 2006-07-06 10:37:33

ANo.2

とりあえず、
fscanf(fp0,"%d %d %d",*(ch[0]),*(ch[1]),*(ch[2]));
がわるいんじゃないかな

投稿日時 - 2006-07-06 05:22:19

ANo.1

C:\Documents and Settings\\dra2jp\\My Documents\\Visual Studio Projects\\C
絶対パスの場合
こんな感じで指定できますし、
相対パスなら
上に上がる時は
../
下に下がる時は
\\フォルダ名
でいいのでは?

投稿日時 - 2006-07-06 03:54:06

あなたにオススメの質問