ド初心者を助けてください!
解決したいこと
c言語のプログラムがうまく処理できません
繰り返しの制御構文を使って「六等」が出たら終了するプログラムを作りたいです
発生している問題・エラー
該当するソースコード
自分で試したこと
六等を3、はずれを0としてn=六等+はずれとして繰り返しをn=3になるまで行うというプログラムを作ろうと思ったが行き詰ってしまった。
c言語のプログラムがうまく処理できません
繰り返しの制御構文を使って「六等」が出たら終了するプログラムを作りたいです
六等を3、はずれを0としてn=六等+はずれとして繰り返しをn=3になるまで行うというプログラムを作ろうと思ったが行き詰ってしまった。
まずエラーですが
previous definition is here
となる理由は,2度の変数定義があるからです.翻訳したら「前回の定義はここ」ですが意訳は「さっき定義したやつと同じものがここでも定義されてるじゃん」です.
確かに,型はそれぞれchar[]
とint[]
で異なりますが変数名が同じなのでこういうエラーが起きます.
n=3
のところでもエラーが出ていますが,セミコロンが抜けているから出ているものです.
六等を3、はずれを0としてn=六等+はずれとして繰り返しをn=3になるまで行うというプログラムを作ろうと思った
とのことですが,for文でiをインクリメントしてi < n
までのループになっているので,3度のループしか行われず,現状のままでは仕様を実現できそうにありません.
また,int rokutou[] = 3
と書いてますが,六等を3
とスカラーにしたいようですので,配列ではなくてint rokutou = 3
と書くべき項だと考えます.ですがやはりrokutou
は過去に宣言したので,int Rokutou = 3
とすると良いでしょう.int hazure[] = 0
も同じです.もっと言えば定数で不変な値なので,#define
で定義するかconst int
で定義するのが一般的です.そして定数は全て大文字で記述することが一般的です.
思いっきりデータ構造が変わりますが以下のようにするのをお勧めします.
初めに6等とハズレをそれぞれ3と0で定義して,targetが一致した場合にn
に加算するというものです.少しは意図されている仕様に近づけてみました.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROKUTOU 3
#define HAZURE 0
int main(void){
int n = 0;
char rokutou[] = "六等!";
char hazure[] = "はずれ";
srand((unsigned int)time(NULL));
for (; n != ROKUTOU;) {
int target = rand() % 10; // 10%の確率で当たる(10%の確率でtargetが3になる)
if (target == ROKUTOU) {
printf("%s\n", rokutou);
n += ROKUTOU;
} else {
printf("%s\n", hazure);
n += HAZURE;
}
}
}
条件を満たすまでループを繰り返すという点ではfor文ではなくてwhile文の方が適してそうですね.
コードの全体像がわからないのでPaizaのリンクにアクセスしなければこちらとしてはコードを知ることもできず,改善提案もできません.Qiita公式のMarkdownの書き方もあります.次のコードブロックの書き方を参考にしてください.
```言語名:タイトル
コード
```
コードブロックの中に収めて書いていただいた方が,こちらでコピペ及び実行しやすくなることで改善の提案がしやすくなります.今一度,書式の検討をお願いします.
一応の答えを載せておきます.
当たるまでやるやつ
https://paiza.io/projects/mZlqOV0mz62hlr0MfsVRBw
確率が10%で当たることの確認
https://paiza.io/projects/8JpWzK3AObdhPbXPTpCzvA
@ryota9621
Questioner
@ryota9621
Questioner
@ryota9621
Questioner