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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

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

Q&A

解決済

1回答

1141閲覧

行列のファイル操作の問題です。行き詰ったので手助けして頂けると嬉しいです。

forza

総合スコア21

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

C++

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

0グッド

0クリップ

投稿2018/06/11 11:17

編集2018/06/11 14:33

前提・実現したいこと

C言語 行列のファイル操作のプログラムです。
手詰まりになってしまったのでご教授頂けると嬉しいです。

問題は、ファイル1にある縦5横4の行列を読み込み、2.5倍したものをファイル2に出力するといったものです。
宜しくお願いします。

該当のソースコード

#include<stdio.h>
#include<stdlib.h>

int main (void)
{
int i,j,x;
FILE *fin, *fout;

if((fin = fopen(“file1.txt”,”r”)) == NULL)
{
printf("ファイル無\n");
exit(1);
}
if((fout=fopen("file2.txt", "w")) == NULL)
{
printf("出力ファイル無。\n");
exit(1);
}
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
{
fscanf(fin,"%d",&x);
x*= 2.5;

fprintf(fout,"%f\n",x);
}
fprintf(fout,”\n”);
fprintf(stdout, “\n”);
}
fclose(fin);
fclose(fout);

return 0;
}

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

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

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

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

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

y_waiwai

2018/06/11 11:33

で、これをどうしたいんでしょうか?
guest

回答1

0

ベストアンサー

まず、ソースをアップする時に、コードとして頂けると読みやすいのですが、、
(ソース全体を選択して、 "<code>" をクリック)

入力ファイルの形式等、分からないので、ソースの範囲で、

if((fin = fopen(“file1.txt”,”r”)) == NULL)

ダブルクォート(") が、全角になっています。 エラー出ませんか?

x*= 2.5;

xは配列と思いますが、掛け算の演算は定義されていたでしょうか?
(こちらも エラーぽいですが、未確認)

で、問題となるのは、コンパイルが通らない or 実行時のエラーのどちらでしょうか?

投稿2018/06/11 12:16

pepperleaf

総合スコア6383

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

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

forza

2018/06/11 14:00

ご回答有難う御座います。 初めて故、不慣れな点で分かりにくくなってしまい申し訳御座いませんでした。 ご丁寧にご教授を有難う御座います。 なんとかここまで導いたのですが??の部分が分かりません。 #include<stdio.h> #include<stdlib.h> int main(void) { float num[5][4]; int i, j; FILE *fin, *fout; if ((fin = fopen("file1", "r")) == NULL) { printf("入力ファイル無\n"); exit(1); } if ((fout = fopen("file2", "w")) == NULL) { printf("出力ファイル無\n"); exit(1); } for (i = 0; i<5; i++) { for (j = 0; j<4; j++) { fscanf(fin, "%f", &num[5][4]); num[5][4] = 2.5*num[5][4]; ???????????????????????? ここが分かりません ???????????????????????? } fprintf(fout, "\n"); fprintf(stdout, "\n"); } fclose(fin); fclose(fout); return 0; }
pepperleaf

2018/06/11 14:22

コンパイルは通るかも知れませんが、実行時に確実にエラーです。 > fscanf(fin, "%f", &num[5][4]); > num[5][4] = 2.5*num[5][4]; num の配列サイズを越えています。 元の x[][] から、num[][] に変えた理由は何でしょうか? ここは元のままでも良い気がします。 (もっとも他で参照していないので、 配列にする必要があるか?) コメントにソースを入れるより、元の質問文を書き換えた方が見やすいと思います。 (変更点を明記)
forza

2018/06/11 14:35

ご回答有難う御座います。 色々と触っていたらxがnumとなってました。 掛け算の定義というところが分かりませんでして、 元の質問文を書き換えてコンパイルすると通りましたが何も数字が出てきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問