以下のファイルを配列に読み込むプログラムを作っています。
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);
}
No.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ファイルを作るとコメントとして
扱われます。
ご丁寧にありがとうございました。
エクスプローラから、ダブルクリックしていました(^^;;
無事解決することができました。
未熟な私に回答をしてくださった方々、本当にありがとうございます。
No.3
- 回答日時:
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というファイルができるのですが、何も表示されません。ファイルがオープンできていないということでしょうか?
No.2
- 回答日時:
こんにちは。
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;
頑張ってください。(^_^;
No.1
- 回答日時:
コンパイルしただけで実行してないなんてことは無いですよね?
気づく点といえば、iを初期化していないことでしょうか。
このままですと、iがでたらめな数字になっていて、それでもプログラムは実行してしまいますから、
実行プログラム自体を書き換えたりします。
何も表示されないのかプログラムが動いてないのか判断するには、
printf に間違いなく表示される文字列(%を使わない)を入れてみると良いですよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
#defineが使用するメモリ領域に...
-
C言語で複数列のデータを1列の...
-
空白を含んだ文字列がうまく格...
-
fscanfの使い方
-
プログラミングの授業の課題です
-
C言語のプログラムで、途中で止...
-
printf による16進表示について
-
型によらないCSVファイルの読み...
-
ファイル入力のエラー
-
受信データから必要な部分のみ...
-
矢印キーを押下してコンソール...
-
マイナスからプラスへ転じた時...
-
C言語での引数の省略方法
-
プログラムでの数字につく”f”の...
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
2÷3などの余りについて
-
10個出力で改行したいのですが...
-
doubleの変数にintとintの割り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
空白を含んだ文字列がうまく格...
-
char型2つを結合し、short型に...
-
【C言語】全角文字の配列を、全...
-
プログラミングの授業の課題です
-
C言語のプログラムで、途中で止...
-
C++で指定文字列のカウント方法...
-
C言語で複数列のデータを1列の...
-
C言語でのCSVファイルの読み出...
-
構造体メンバの初期化
-
なぜ無限ループになるかが分か...
-
reallocでエラー
-
Ç言語でファイルサイズを変更す...
-
ファイル操作で全角空白を消す
-
矢印キーを押下してコンソール...
-
セグメンテーションエラーの原...
-
static付き宣言の初期化
-
ファイルから数字列を16進数の...
おすすめ情報