ryota9621
@ryota9621

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ド初心者を助けてください!

解決したいこと

c言語のプログラムがうまく処理できません
繰り返しの制御構文を使って「六等」が出たら終了するプログラムを作りたいです

発生している問題・エラー

49ED3EEB-54F8-4551-B4E5-981359723B93.jpeg

該当するソースコード

自分で試したこと

六等を3、はずれを0としてn=六等+はずれとして繰り返しをn=3になるまで行うというプログラムを作ろうと思ったが行き詰ってしまった。

0

2Answer

まずエラーですが

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の書き方もあります.次のコードブロックの書き方を参考にしてください.

```言語名:タイトル
コード
```

コードブロックの中に収めて書いていただいた方が,こちらでコピペ及び実行しやすくなることで改善の提案がしやすくなります.今一度,書式の検討をお願いします.

1Like

Comments

  1. @ryota9621

    Questioner

    ありがとうございます!!!
    助かりました!
  2. @ryota9621

    Questioner

    すみません、初めてだったもので使い勝手がよく分からず手間をかけさせてしまいました。
    ご親切に教えていただき本当にありがとうございます。
  3. 一応暇だったので1等が出るまで引くやつも作っておきました.
    先のものは天井なしで毎回10%の確率で当たるまで引くやつでしたが,以下のものは俗に言う天上ありガチャです.

    https://paiza.io/projects/gS1ZOPLtGo95bRq16MLcMA

    以下,1回目に引く確率
    ハズレ: 21/42 = 50%
    6等: 6/42 = 14.3%
    5等: 5/42 = 11.9%
    4等: 4/42 = 9.52%
    3等: 3/42 = 7.14%
    2等: 2/42 = 4.76%
    1等: 1/42 = 2.38%

    引くごとに段々分母が減っていって,当たっていないやつの当たる確率が上がります.
    もし最初に2等を引いたら確率2/42だったのが,次に2等を引く確率が1/41になり,ほか全部では分母だけが41になります

    プログラミング楽しんでください.
  4. @ryota9621

    Questioner

    すごい...!!
    ちょっと感動しちゃいました笑
    プログラミングの勉強のモチベに繋がります、本当にありがとうございました
    また機会があればよろしくお願いします。
  5. モチベに繋がったのならよかったです.本質問をクローズにしていただければ終了です.お疲れ様でした.

Your answer might help someone💌