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

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

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

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

Q&A

解決済

2回答

196閲覧

構造体の配列で上手くいかないです

tokidoki

総合スコア9

C

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

0グッド

0クリップ

投稿2018/08/18 07:35

前提・実現したいこと

実現したいことは、下記のプログラムを動かし、ファイルに数値を書き込みたい。

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

発生している問題は、ファイルに書き込まれる数値が全て0になってしまっています。
因みに、gccは上手くいってます。

エラーメッセージなし

エラーメッセージ

該当のソースコード

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4 5#define N 7 6#define c 100 7 8typedef struct fk{ 9 double d; 10}bb; 11 12 13 14void aaa(bb a1[c][N]); 15 16 17int main(){ 18 19 20 bb fs1[c][N]; 21 22 FILE *fp; 23 if((fp=fopen("test.csv","w"))==NULL){ 24 printf("FILE not open\n"); 25 return -1; 26 } 27 28 29 for(int i=0;i<=c;i++) { 30 for(int j=0;j<=N;j++){ 31 fprintf(fp,"%lf\n",fs1[i][j].d); 32 } 33 } 34 printf("End\n"); 35 fclose(fp); 36 return 0; 37 38} 39 40 41 42void aaa(bb a1[c][N]){ 43 44 for(int i=0;i<=c;i++){ 45 for(int j=0;j<=N;j++){ 46 a1[i][j].d=cos(i*M_PI/N*j); 47 } 48 } 49 50}

試したこと

補足情報(FW/ツールのバージョンなど)

ubuntu環境です。

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

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

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

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

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

guest

回答2

0

ベストアンサー

確かに、y_waiwaiさんの書かれた様に、

for(int i=0;i<c;i++){
for(int j=0;j<N;j++){

なんですが、fs1[c][N] に値を設定している箇所が無いので、何が書かれるかは、不明です。gccだと、スタック領域が 0クリアされているだけかと思われます。
元のコードでは、 (c+1) x (N+1) 個のデータが書かれるだけでそれ以外の違いは無し。(ただし、範囲外へのアクセスとなるでの不正動作する可能性大です)

aaa()は、単に、

bb fs1[c][N];

の後で、

aaa(fs1);

と呼び出せば、値の設定はできます。 それが期待するものかは分かりませんが。

投稿2018/08/18 12:55

pepperleaf

総合スコア6383

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

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

tokidoki

2018/08/18 13:29

ご回答ありがとうございます。 書き直し、実行してみました。そして、数値を書込む事ができました。 ありがとうございます。
guest

0

for(int i=0;i<=c;i++){

for(int j=0;j<=N;j++){

コレジャナイ、ですね

for(int i=0;i<c;i++){
for(int j=0;j<N;j++){

としてください


ところで、

bb fs1[c][N];

に値の設定してるところが見当たりません。
aaa関数も呼び出してるところがないですが、どういう結果になるのを期待してるんでしょうか

投稿2018/08/18 07:39

編集2018/08/18 07:45
y_waiwai

総合スコア87747

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

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

tokidoki

2018/08/18 08:02

ご回答ありがとうございます。 実現したいこととして、voidで計算した数値をmainでファイルに書き込みたいってことです。 c*n分の計算したものをfs1[c][N]にコピーして、その数値を出力したいと考えています。 値の設定、aaa関数の呼び出しは、どの様に記述すればいいのでしょうか? プログラムの初心者で、初歩的な事が分かっていないですが、ご回答の程、宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問