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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

730閲覧

7行5列の行列と5行4列の行列をファイルから取り出し積を計算する課題です。指定の型と引数の方が異なっているという警告が出ます。どこがおかしいでしょうか。。

opopopop

総合スコア5

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/04/21 10:57

編集2023/04/21 12:12

7行5列の行列と5行4列の行列をファイルから取り出し積を計算する課題です。
format specifies type 'float *' but the argument has type 'double' [-Wformat]という警告が出て、実行するとbus errorというものが出ます。どうしたら良いでしょうか。。

macbookでvscodeを使用しています。

c/c++

1#include<stdio.h> 2#include<stdlib.h> 3 4int main(int argc, char* argv[]){ 5 FILE* afp = NULL; 6 FILE* bfp = NULL; 7 float gyou[7][5]; 8 float retu[5][4]; 9 float naiseki[7][4]; 10 int x, y; 11 int i, j; 12 13 char* afile = NULL; 14 char* bfile = NULL; 15 afile = argv[1]; 16 bfile = argv[2]; 17 18 afp = fopen(afile,"r"); 19 if(afp == NULL){ 20 printf("%s ファイルを開けません¥n",argv[1]); 21 exit(1); 22 } 23 for(i=0; i<7;i++){ 24 for(j=0;j<5;j++){ 25 fscanf(afp,"%f",gyou[i][j]); 26 } 27 } 28 bfp = fopen(bfile,"r"); 29 if(bfp == NULL){ 30 printf("%s ファイルを開けません",argv[2]); 31 exit(2); 32 } 33 for(x=0;x<5;x++){ 34 for(y=0;y<4;y++){ 35 fscanf(bfp,"%f",retu[x][y]); 36 naiseki[i][y] += gyou[i][j]*retu[x][y]; 37 printf("%3f¥n",naiseki[i][x]); 38 } 39 } 40 fclose(afp); 41 fclose(bfp); 42 43 return 0; 44}

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

Zuishin

2023/04/21 11:03

言語が違います。
opopopop

2023/04/21 11:07

詳しく教えていただいてもよろしいでしょうか。。 c/c++でやっているつもりです。
Zuishin

2023/04/21 11:08

タグが C# になっているので、C に修正してください。
opopopop

2023/04/21 11:10

ありがとうございます。修正しました。
tatsu99

2023/04/21 11:18

ファイルの内容はどうなってますか?
opopopop

2023/04/21 11:30

一つ目 5.741,7.488,7.106,0.885,0.937 1.916,8.577,3.716,6.037,8.436 1.779,9.249,0.938,5.991,1.907 7.802,3.059,3.340,7.636,5.462 0.699,1.748,9.279,2.433,7.607 1.829,6.159,4.444,8.373,6.260 4.553,2.470,2.134,9.859,3.440 二つ目 9.734,3.128,4.619,1.977 0.810,1.592,1.467,9.515 3.125,2.615,0.976,0.218 8.788,2.443,0.791,7.092 3.505,6.457,5.378,1.341 こんな感じです。
yominet

2023/04/21 11:30

>実行しても何も表示されません この状況を詳しく。 ありがちな例としては 人の目にはとまらぬ速さで処理が完了かつ終了している。 ので、何も表示されないと勘違いしている この場合、 1.ブレークポイントをおいて途中で止める 2.処理の最後にキー入力待ちなどをいれて終了待機させる。 あたりで確認できます。
opopopop

2023/04/21 11:44

もう一度コンパイルしてみたのですが、フォーマットはint*型を指定しているが、引数はだぶる型を使用している。という警告が出ました。1つめと2つ目のfscanfの中身と最後のprintfの中身です。
jimbe

2023/04/21 11:50 編集

コードにはコードのマークダウン(```)を使用してください。 また、コードの実行に必要なデータやコンパイル時のワーニング等質問に関係する各種情報は、コメントで無く質問を編集して追記してください。 ついでに、 teratail はデバックしてもらう所ではありません。
opopopop

2023/04/21 12:01

ご指摘ありがとうございます。
yominet

2023/04/21 13:21

◆警告とは別件です 33行目からのfor文の中でも"i"を使用していますが、 このiは33,34行目のfor文とは無関係な値(22-27行目に使用していたときの残滓)になっていませんか?
guest

回答2

0

ベストアンサー

とりあえず、2つのファイルを読みこんで、gyou,retuに格納後、その内容を印字するところまで、作り直しました。
特に、fscanfの仕方が誤っていたので、その個所を注意して確認してください。
内積の計算の箇所は自分でトライしてみてください。(どうしてもわからない場合は再度補足してください)

C

1#include<stdio.h> 2#include<stdlib.h> 3 4int main(int argc, char *argv[]) 5{ 6 FILE *afp = NULL; 7 FILE *bfp = NULL; 8 double gyou[7][5]; 9 double retu[5][4]; 10 double naiseki[7][4]; 11 int i, j; 12 char *afile = NULL; 13 char *bfile = NULL; 14 afile = argv[1]; 15 bfile = argv[2]; 16 17 afp = fopen(afile, "r"); 18 if (afp == NULL) { 19 printf("%s ファイルを開けません\n", argv[1]); 20 exit(1); 21 } 22 for (i = 0; i < 7; i++) { 23 for (j = 0; j < 5; j++) { 24 fscanf(afp, "%lf,", &gyou[i][j]); 25 } 26 } 27 bfp = fopen(bfile, "r"); 28 if (bfp == NULL) { 29 printf("%s ファイルを開けません", argv[2]); 30 exit(2); 31 } 32 for (i = 0; i < 5; i++) { 33 for (j = 0; j < 4; j++) { 34 fscanf(bfp, "%lf,", &retu[i][j]); 35 } 36 } 37 38 printf("1st file\n"); 39 for (i = 0; i < 7; i++){ 40 for (j = 0; j < 5; j++){ 41 printf("%f\t",gyou[i][j]); 42 } 43 printf("\n"); 44 } 45 46 printf("2nd file\n"); 47 for (i = 0; i < 5; i++){ 48 for (j = 0; j < 4; j++){ 49 printf("%f\t",retu[i][j]); 50 } 51 printf("\n"); 52 } 53 54 fclose(afp); 55 fclose(bfp); 56 57 return 0; 58} 59

実行結果
1st file
5.741000 7.488000 7.106000 0.885000 0.937000
1.916000 8.577000 3.716000 6.037000 8.436000
1.779000 9.249000 0.938000 5.991000 1.907000
7.802000 3.059000 3.340000 7.636000 5.462000
0.699000 1.748000 9.279000 2.433000 7.607000
1.829000 6.159000 4.444000 8.373000 6.260000
4.553000 2.470000 2.134000 9.859000 3.440000
2nd file
9.734000 3.128000 4.619000 1.977000
0.810000 1.592000 1.467000 9.515000
3.125000 2.615000 0.976000 0.218000
8.788000 2.443000 0.791000 7.092000
3.505000 6.457000 5.378000 1.341000

投稿2023/04/22 02:38

編集2023/04/22 04:20
tatsu99

総合スコア5218

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

0

メッセージで指摘されている通りです。
fscanf で float 値を読み込むフォーマット %f に対応するパラメータは float 型変数へのポインタ でなければなりませんが、提示されているコードでは float 変数の中身が指定されているため double 型に変換された上で問題が指摘されています。

投稿2023/04/21 18:18

編集2023/04/22 07:03
jimbe

総合スコア11848

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.68%

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

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

質問する

同じタグがついた質問を見る

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。