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

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

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

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Q&A

解決済

c言語にて総当たり戦の各チーム名と点数状況の表示

nero_23
akagi_56

総合スコア1

C

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

2回答

0グッド

0クリップ

307閲覧

投稿2023/01/25 12:36

サッカーでTeam-0からTeam-4までの5チームがリーグ戦(総当たり戦)
を行ったとき,各チームが対戦相手から取った点を
int goal[5][5] = {{0,3,4,0,2},{3,0,2,1,1},{2,0,0,3,1},{4,6,2,0,2},{1,1,2,4,0}};
のような二次元配列(goal[][])に格納する.
各試合結果を一例のように表示するプログラムを作成する.
という課題に対して、for文を用いてプログラムを作成したいのですが、以下のようなプログラムしか作れず困っております。
出力結果は下記のようになります。
Team-0 vs Team-0 : 0 - 3(一例)

エラーメッセージ
aplle.c:6:2: error: variable-sized object may not be initialized
int goal[a][b]= {{0,3,4,0,2},{3,0,2,1,1},{2,0,0,3,1},
^~~
aplle.c:6:20: warning: excess elements in array initializer
int goal[a][b]= {{0,3,4,0,2},{3,0,2,1,1},{2,0,0,3,1},
^
ソースコード
#include <stdio.h>

int main(void)
{
int a=5, b=5;
int goal[a][b]= {{0,3,4,0,2},{3,0,2,1,1},{2,0,0,3,1},
{4,6,2,0,2},{1,1,2,4,0}};
int i, j, k;
for(i=0; i<5; i++){
for(j=0; j<5; j++){
if(a != b){
for(k=0; k<5; k++){
pritnf("Team-%d vs Team-%d", a, b);
a+=b;
}
}else if(goal[a]!=goal[b]){
printf(" : %d - %d", goal[a][b], goal[a][b]);
}else{
printf("\n");
}
}
}

return 0;

}

試したこと
for文を用いてるので2重にしてTeam-%d vs Team-%dと : %d - %dを区切って、if文で条件を提示したりしましたが、そもそもやり方があってるのかわかりません。
またポインタを用いて別のところで確定させた点数の順番をmain関数にもどして出力させる方法もあるかと思って模索しましたがわかりませんでした。
何卒お答えいただければ幸いです。

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

Geanyで作成

ここにより詳細な情報を記載してください。

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

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

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

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

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

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

y_waiwai

2023/01/25 13:08

このままではコードが読みづらいので、質問を編集し、</>(コードの挿入)ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
jimbe

2023/01/25 19:25 編集

>Team-0 vs Team-0 : 0 - 3(一例) この点数は、二次元配列の何処と何処の値でしょう。 goal は点数として、a,b,i,j,k は何を表す変数でしょうか。
pig_vba

2023/01/26 05:34

まず、一度すべての変数に意図的に名前を付けなおしてください。簡単でもローマ字でもいいです。loop1みたいなクソみたいな命名でも構わないので「この変数はこう使う!」とわかる命名をしてください。 そうすれば、"少なくとも"for文なのにループ用変数を一切使っていない、i,j,kのループなのに何故かa,bを使用しているということが間違いであるということが自分で気づけるようになります。

回答2

0

for文を用いてプログラムを作成したいのですが、以下のようなプログラムしか作れず困っております。

そういう場合には一度 for を用いずにやってください.
今回のケースだと10試合分の結果を表示するのでしょうから,printf を10行連ねれば完成しますよね.
「最初からループを用いた書き方ができない」のであれば,馬鹿馬鹿しいと思わずにまずはそれをやるべき.

で,そのできたコードを眺めて,ループでやれそうな法則性を具体的に見出してください.
そしたらあとは,それをループを用いる形に書きかえるだけです(:その他の余計なことは一切しない).

……っていうような手順を経れば,{不要な, 意味不明な, etc}処理が入り込んだり変数が増えたり等々する余地はないでしょうから,うまく事がはこぶのではないでしょうか.

投稿2023/01/26 01:38

fana

総合スコア10799

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

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

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

回答へのコメント

fana

2023/01/26 01:41

要は, (1) 最初は書き方はどうあれ「まともに動く」物を作る (2) 動作結果が変わらない範囲で「書き方」の側を「良いと思う形」に変える っていう至極普通の話. (2)は「リファクタリング」とか呼ばれるのかもしれない.

0

ベストアンサー

敢えて厳しく言えば、コンパイル時点でエラーの出るものは文法に則っていない、「プログラム未満のなにかの文字列に過ぎない」です。小細工に走らず、文法を確認してください。

インターネットはそもそもがコンピュータ屋の巣窟であったこともあり、プログラム関連の情報は比較的豊富に得られます。なので、「エラーメッセージをそのまま」検索にかけてみれば、いろいろなことがわかることも多いです。
例えばerror: variable-sized object may not be initializedでググってみれば、現時点でteratailのQ&AYahoo!知恵袋のQ&AstackoverflowのQ&Aがトップ3で引っかかりました。まずはこの辺の情報を活用して、コンパイルエラーを撲滅するところから始めるべきでしょう。
プログラムの工夫をするのは、まずプログラムを成立させてから。

(敢えて言えば、それくらいの"簡単な下調べ"は済ませてから質問すべき、と思います。「なんでも疑問に思ったら質問してね」の知恵袋ではなく、ここは「ITエンジニア特化型のQ&Aサイト」なのですから。ここで質問するということは、少なくともITエンジニアの卵であるという自覚はあるのでしょう?)


続いて。
文法ではありませんが、変数名にa,b,...等アルファベット一文字を割り当てることには慎重になるべきです。変数の中身や役割を表す(ある程度の長さを持った)名前にすべきでしょう(何らかの数式が与えられていて式中の変数名をそのままプログラムに落とし込む等、あるいはループカウンタ等限定された範囲で使われるものでは一文字の変数が適切と言える場合もありますが)。
変数名を適切につけていれば、無駄な変数を作ってしまう機会も減るでしょう。名前がつけられないとはつまり存在の理由が見つからないことでもあるでしょうから。
逆に、いまどきはメモリも潤沢にあるので、役割に応じて必要な変数を増やすことに抵抗を持つ必要はほとんどないはずです。

今回であれば、(配列の宣言に使っているところから)aの役割はチーム総数、bもチーム総数...なぜこれが二つの変数に分かれるのですか? あるいは、チーム総数は変化しないはずですから、チーム総数の値を変化させているとしたらそれはおかしな処理、というのが(適切に名前をつけることによって)見えてくるかも知れません。
チーム総数を表す以外の変数が必要なら新たに変数を設置しましょう(今回のプログラムではループの変数以外に変数の追加は不要な気がしますが)。

投稿2023/01/25 22:35

thkana

総合スコア7385

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

C

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

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。