アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のファイルを配列に読み込むプログラムを作っています。

1987 1100 12 23 2.467164 0.75153
1989 1202 12 31 2.456249 0.72896
1990 1204 9 28 2.484802 0.763903
1991 1206 11 26 2.520005 0.750182
1985 1207 9 26 2.499319 0.749116
以下の通りプログラムを組んでみました。
コンパイルしたところ、出力はされませんでした。
エラーも出ていないので、入力、出力などどこが悪いのかわかりません。
ほとんど初心者です。間違いが分かる方、よろしくお願いします。
#include<stdio.h>
#define SIZE 5
main()
{ int a, b, c, d, i;
static int year[SIZE],month[SIZE],day[SIZE],code[SIZE];
  double e, f;
static double latitude[SIZE],longitude[SIZE];
FILE *fp;

fp=fopen("c\distance.dat","r");
while((fscanf(fp,"%d%d%d%d%lf%lf",&a,&b,&c,&d,&e,&f)) !=EOF)
{ year[i]=a;
month[i]=b;
day[i]=c;
code[i]=d;
latitude[i]=e;
longitude[i]=f;
i++;

printf("%13d%8d%8d%8d%9.6lf%9.6lf\n",&a,&b,&c,&d,&e,&f);
}

fclose(fp);
return(0);
}

A 回答 (4件)

こんにちは。

itohhといいます。

環境は、Windowsでよろしいんですよね?(Windowsと解釈して解説します。)

一応、確認したいのですが。
file.exeは、どのようにして動かしていますか?
エクスプローラからダブルクリックで動かしていませんよね?(^_^;

DOS窓(コマンドプロンプト)でfile.exeがあるディレクトリに移動して実行していますよね?

>fp=fopen("c\\distance.dat","r");
>if(fp==NULL){
>printf("open error\n");
>return(1);
>}
それから、e101treさんのアドバイスにあるようにdistance.datは、どこにあるのでしょうか?
(A)Cドライブ直下にあるのなら「c:\\distance.dat」
(B)file.exeがあるディレクトリの下にあるのなら「c\\distance.dat」
補足に載っているソースでは(B)になっていますが、OKですか?

ファイルのオープンに失敗したのなら、printf文で出力している「open error」は出力されていますか?

デバッグする環境が無い場合、(Visual C++のデバッガーなど)
どこまで、動いたかを確認するためにprintf文を入れてみましょう。

例。(ファイルのオープンの前に入れてみる場合)

#ifdef _DEBUG
printf("<<DEBUG FileOpen>>\n");
#endif

fp=fopen("c\\distance.dat","r");
if(fp==NULL){
printf("open error\n");
return(1);
}

#VC++の場合です。「_DEBUGのifブロック」は、デバッグバージョンのexeファイルを作ると
コンパイルされるコードになり、リリースバージョンのexeファイルを作るとコメントとして
扱われます。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。

エクスプローラから、ダブルクリックしていました(^^;;

無事解決することができました。
未熟な私に回答をしてくださった方々、本当にありがとうございます。

お礼日時:2001/12/11 16:48

fopen() が成功しているかチェックしてみてはいかかでしょう?



fp=fopen("c\distance.dat","r");
if (fp == NULL) {
printf("open error.\n");
return (1);
}

多分、ここでエラーが起こっているのだと思います。
ファイル名が間違ってませんか。

"C\\distance.dat" (Cフォルダの下のdistance.datファイル)
 か、
"C:\\distance.dat" (Cドライブ直下のdistance.datファイル)
かのどちらかだと思います。

この回答への補足

早々のお答えありがとうございます。
みなさんの意見を総合して以下のように変更しました。
#include<stdio.h>
main()
{
  int a, b, c, d;
static int year[10],month[10],day[10],code[10];
double e, f;
static double latitude[10],longitude[10];
FILE *fp;

int i=0;

fp=fopen("c\\distance.dat","r");
if(fp==NULL){
printf("open error\n");
return(1);
}
while((fscanf(fp,"%d%d%d%d%lf%lf",&a,&b,&c,&d,&e,&f)) !=EOF)
{ year[i]=a;
month[i]=b;
day[i]=c;
code[i]=d;
latitude[i]=e;
longitude[i]=f;
i++;

printf("%13d%8d%8d%8d%9.6lf%9.6lf\n",a,b,c,d,e,f);
}

fclose(fp);
return(0);
}
しかし、これでfile.exeというファイルができるのですが、何も表示されません。ファイルがオープンできていないということでしょうか?

補足日時:2001/12/11 15:05
    • good
    • 0

こんにちは。

itohhといいます。

なにも出力されないのは、
> printf("%13d%8d%8d%8d%9.6lf%9.6lf\n",&a,&b,&c,&d,&e,&f);
の、「&a,&b,&c,&d,&e,&f」が間違っているからではないでしょうか?
「a,b,c,d,e,f」が正解だと思いますよ。(ヘルプで確認してみましょう!)

あと、他の方が回答しているように変数は初期化を必ず行いましょう。
例。int i=0;

頑張ってください。(^_^;
    • good
    • 0

コンパイルしただけで実行してないなんてことは無いですよね?


気づく点といえば、iを初期化していないことでしょうか。
このままですと、iがでたらめな数字になっていて、それでもプログラムは実行してしまいますから、
実行プログラム自体を書き換えたりします。

何も表示されないのかプログラムが動いてないのか判断するには、
printf に間違いなく表示される文字列(%を使わない)を入れてみると良いですよ。
    • good
    • 0

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