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

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

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

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

Q&A

4回答

187閲覧

構造体についての質問

Rel

総合スコア6

C

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

0グッド

0クリップ

投稿2018/05/10 04:12

編集2018/05/10 04:17

前提・実現したいこと

main関数内にある構造体をmain関数の下に出しても正常に動作するようにしたいです

該当のソースコード

#include "syain.h" #include <stdio.h> #define NINZU 5 #define KAMOKU 4 struct seiseki { /* 成績データ */ int no; /* 学生番号 */ int ten[4]; /* 点数 */ double avg; /* 平均点 */ char hyouka; /* 評価 */ }; int main(void) { { int close; int i, j; struct seiseki mycls[NINZU]{ { 1001, 85, 74, 63, 90, 0.0, '?' }, { 1002, 78, 65, 70, 62, 0.0, '?' }, { 1003, 89, 92, 88, 76, 0.0, '?' }, { 1004, 32, 48, 66, 25, 0.0, '?' }, { 1005, 92, 76, 81, 98, 0.0, '?' }, }; printf("番号 国語 数学 理科 社会  平均  評価\n"); for (i = 0; i < NINZU; i++) { /*** 平均点を求める ***/ for (j = 0; j < KAMOKU; j++) { mycls[i].avg = mycls[i].avg + mycls[i].ten[j]; } mycls[i].avg = mycls[i].avg / KAMOKU; /*** 評価を求める ***/ if (mycls[i].avg < 60.0) mycls[i].hyouka = 'D'; else if (mycls[i].avg < 70.0) mycls[i].hyouka = 'C'; else if (mycls[i].avg < 80.0) mycls[i].hyouka = 'B'; else mycls[i].hyouka = 'A'; } /*** 結果の表示 ***/ for (i = 0; i < NINZU; i++) { printf("%4d %4d %4d %4d %4d %8.2f %c\n", mycls[i].no, mycls[i].ten[0], mycls[i].ten[1], mycls[i].ten[2], mycls[i].ten[3], mycls[i].avg, mycls[i].hyouka); } scanf_s("%d", &close); return 0; }; }

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

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

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

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

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

maisumakun

2018/05/10 04:26

なぜmain関数の下に出したいのでしょうか。
guest

回答4

0

C

1//#include "syain.h" 2#include <stdio.h> 3 4#define NINZU 5 5#define KAMOKU 4 6 7struct seiseki { /* 成績データ */ 8 int no; /* 学生番号 */ 9 int ten[4]; /* 点数 */ 10 double avg; /* 平均点 */ 11 char hyouka; /* 評価 */ 12}; 13 14int main() { 15 int close; 16 int i, j; 17 extern struct seiseki mycls[]; 18 19 printf("番号 国語 数学 理科 社会  平均  評価\n"); 20 for (i = 0; i < NINZU; i++) { 21 /*** 平均点を求める ***/ 22 for (j = 0; j < KAMOKU; j++) { 23 mycls[i].avg = mycls[i].avg + mycls[i].ten[j]; 24 } 25 mycls[i].avg = mycls[i].avg / KAMOKU; 26 27 /*** 評価を求める ***/ 28 if (mycls[i].avg < 60.0) 29 mycls[i].hyouka = 'D'; 30 else if (mycls[i].avg < 70.0) 31 mycls[i].hyouka = 'C'; 32 else if (mycls[i].avg < 80.0) 33 mycls[i].hyouka = 'B'; 34 else 35 mycls[i].hyouka = 'A'; 36 } 37 38 /*** 結果の表示 ***/ 39 for (i = 0; i < NINZU; i++) { 40 printf("%4d %4d %4d %4d %4d %8.2f %c\n", 41 mycls[i].no, mycls[i].ten[0], mycls[i].ten[1], 42 mycls[i].ten[2], mycls[i].ten[3], 43 mycls[i].avg, mycls[i].hyouka); 44 } 45 scanf_s("%d", &close); 46 return 0; 47} 48 49struct seiseki mycls[NINZU] = { 50 { 1001, 85, 74, 63, 90, 0.0, '?' }, 51 { 1002, 78, 65, 70, 62, 0.0, '?' }, 52 { 1003, 89, 92, 88, 76, 0.0, '?' }, 53 { 1004, 32, 48, 66, 25, 0.0, '?' }, 54 { 1005, 92, 76, 81, 98, 0.0, '?' }, 55 };

投稿2018/05/10 04:38

episteme

総合スコア16614

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

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

maisumakun

2018/05/10 04:45

これならC++にしても問題なさそうですね。
episteme

2018/05/10 04:48

グローバル変数になっちまうけど、”main関数の下に出したい"そうだから構わんよね? # 関数でくるんでしまえば構造体自体は隠せるけど...
guest

0

無理ですね

ヘッダファイルにその定義を置くようにすればどうですか

投稿2018/05/10 04:21

y_waiwai

総合スコア87774

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

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

0

C言語にのみ存在する(C++には適合しない)仮定義という概念を活用すれば、変数の宣言だけ先にして、定義を後回しにすることができます(IBM)。

paiza.ioでの実行例

C

1 2struct seiseki mycls[NINZU]; 3 4int main(void) { 5 /* この中でmyclsを使える */ 6} 7 8struct seiseki mycls[NINZU] = { 9 /* 初期化子略 */ 10};

投稿2018/05/10 04:41

maisumakun

総合スコア145184

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

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

0

無理です。
C言語の場合、使いたい場所より前(上)に定義しておく必要があります。

投稿2018/05/10 04:30

ttyp03

総合スコア16998

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問