質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

624閲覧

関数内の計算がmain関数で出力できない。

tackle.8

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2022/11/25 13:49

編集2022/11/25 14:00

前提

座標の距離計算を行い,新たに距離行列に代入する関数を作りました。

発生している問題・エラーメッセージ

main関数で関数呼び出しを行い,printfで出力を試みようと思うも、エラーはでず出力もされません。

該当のソースコード

C

1typedef struct { 2 double x; 3 double y; 4} Location; 5 6int load_location( char *fname, Location loc[] ) { 7 FILE *fp; 8 int n=0, i; 9 double x, y; 10 if ( (fp=fopen(fname,"r")) == NULL ) { 11 printf("%s not open\n", fname); 12 exit(0); 13 } 14while(fscanf(fp, "%d%lf%lf", &i, &x, &y)==3) { 15 loc[n].x = x; 16 loc[n].y = y; 17 n++; 18 } 19 fclose(fp); 20 return n; 21} 22 23void calc_distance(Location loc[], double d[N][N], int n) { 24 int i, j; 25 for(i=0; i<n; i++){ 26 for(j=0; j<n; i++){ 27 d[i][j] = sqrt(pow(loc[i].x - loc[j].x,2) +pow(loc[i].y - loc[j].y,2)); 28 } 29 } 30} 31 32int main(void){ 33 34Location loc[N]; 35int n; 36n = load_location("tsp.txt",loc); 37 38int p[n-1]; 39double d[N][N] = {}; 40 41 42calc_distance(loc,d,n); //ノード間距離計算 43 44for(int i=0;i<n;i++){ 45 for(int j=0;j<n;j++){ 46 printf("%lf",d[i][j]); 47 } 48} 49 50 51return 0; 52}

初心者質問で申し訳ないのですが、どなたか教えていただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/11/25 13:50

その定義も含めたコード全体を提示しましょう
tackle.8

2022/11/25 14:00

かしこまりました。 修正しました。
jimbe

2022/11/25 16:36 編集

calc_distance に変数間違いがありますね。 あちこちに printf("A\n"); とか printf("B\n"); とか入れて実行し、表示された所までは通っている、表示されなかった所までで何か変とアタリが付きます。医者が病気の原因を突き止める為に様々な検査をするように、調査してみてください。
guest

回答3

0

ベストアンサー

c

1void calc_distance(Location loc[], double d[N][N], int n) { 2 int i, j; 3 for(i=0; i<n; i++){ 4 for(j=0; j<n; i++){ // i++ ?

投稿2022/11/25 23:56

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

d[i][j] = sqrt(pow(loc[i].x - loc[j].x,2) +pow(loc[i].y - loc[j].y,2));
の直後に、
printf("i=%d, j=%d, d[i][j]=%f\n", i, j, d[i][j]);
を入れてみれば、何が悪いのか分かるはずです。

質問する前に、変数の値の変化を見ようとしないのはなぜですか?

投稿2022/11/25 22:57

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

while(fscanf(fp, "%d%lf%lf", &i, &x, &y)==3) {

フォーマット文字列がまずいです
まず、ここでファイルの読み込みに失敗して、ひたすら待ちに入ってしまってます
そこらへんからまずは修正しましょう

#その他にも色々ツッコミどころはありますが。。

投稿2022/11/25 15:25

y_waiwai

総合スコア87749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tackle.8

2022/11/25 15:53

ご回答ありがとうございます。 一応ファイル読み込みには成功してる(?)ようで,main関数でlocは出力できているのですが,うまくいってないのでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問