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

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

ただいまの
回答率

91.24%

  • C

    2701questions

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

c言語についてご質問させていただきます

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 95

kd3

score 3

c言語を始めたばかりの者です。
c言語のプログラムで自作のゲームを作成中なのですが、

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <time.h>

#define RAND_MAX 0x7fffffff

struct status{
  char name[64];
  int HP;
  int attack;
  int speed;
};

int main(void){


  //敵キャラのステータス。
  struct status A,B,C,D,E,F,You;

  strcpy(A.name,"A");
  A.HP=1000;//敵のHP。
  A.attack=100;//敵の攻撃力。
  A.speed=100;//敵の速さ。以下同様。

  strcpy(B.name,"B");
  B.HP=100;
  B.attack=100;
  B.speed=100;

  strcpy(C.name,"C");
  C.HP=100;
  C.attack=100;
  C.speed=100;

  strcpy(D.name,"D");
  D.HP=100;
  D.attack=100;
  D.speed=100;

  strcpy(E.name,"E");
  E.HP=100;
  E.attack=100;
  E.speed=100;

  strcpy(F.name,"F");
  F.HP=100;
  F.attack=100;
  F.speed=100;

  strcpy(F.name,"You");
  You.HP=1000;
  You.attack=200;
  You.speed=100;

  puts("一人目の敵です。");
  puts("クイズに1か2か3か4で答えてください。"); 

  int s;
  int flag[10];
  int ans;
  int i;

  flag[0]=0;
  flag[1]=0;
  flag[2]=0;
  flag[3]=0;
  flag[4]=0;
  flag[5]=0;
  flag[6]=0;
  flag[7]=0;
  flag[8]=0;
  flag[9]=0;

  do{
    do{
      srand(time(NULL)); 
      i = rand()%10+1;
    }while(flag[i]==1);

    if(i==0){
      puts("天文対話を書いたのは誰か");
      puts("0. ガリレオ 1.ケプラー 2.ニュートン 3.ファラデー");
      scanf("%d",ans);
      if(ans==0){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[0]=1;
    }



    if(i==1){
      puts("母の日に贈る花で有名な「カーネーション」。");
      puts("さて、黄色のカーネーションの花言葉は次のうちどれ?");
      puts("0.家族愛 1.感謝 2.嫉妬 3.軽蔑");
      scanf("%d",ans);
      if(ans==3){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[1]=1;
    }



    if(i==2){
      puts("日常的に「マジ?」って言葉がよく使われますが、その「マジ」という言葉は、一体いつからあったでしょう?");
    puts("0.江戸時代 1.明治時代 2.昭和 3.平成");
      scanf("%d",ans);
      if(ans==0){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[2]=1;
    }



    if(i==3){




      puts("次のうち、実際に北海道に存在する川はどれ?");
      puts("0.イトオシイ川 1.クルオシイ川 2.ヤリキレナイ川 3.チョウシデナイ川");
      scanf("%d",ans);
      if(ans==2){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[3]=1;


    }
    if(i==4){

      puts("伊勢神宮で祀られている神は?");
      puts("0.天照大神 1.伊弉諾尊 2.須佐之男命 3.倭建命");
      scanf("%d",ans);
      if(ans==0){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[4]=1;



    }
    if(i==5){



      puts("日本三大奇祭の一つ、御柱祭は○年に一度開催される。");
      puts("0…5 1…6 2…7 3…8");
      scanf("%d",ans);
      if(ans==2){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[5]=1;




    }
    if(i==6){

      puts("カリウムは英語で");
      puts("0.sodium 1.hydrogen 2.sulfur 3.potassium");
      scanf("%d",ans);
      if(ans==3){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[6]=1;


    }
    if(i==7){


      puts("「○○の猫」では、猫の生と死が重なり合った状態を考える。");
      puts("0.シュレディンガー 1.ブール 2.チューリング 3.メビウス");
      scanf("%d",ans);
      if(ans==0){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[7]=1;


    }
    if(i==8){


      puts("真空状態が負のエネルギーを持つ電子によって完全に占められている状態であるというモデルは「○○の海」という");
      puts("0.ケプラー 1.ディラック 2.パップス 3.ユークリッド");
      scanf("%d",ans);
      if(ans==1){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[8]=1;


    }
    if(i==9){


      puts("3 以上の自然数 n について、xn + yn = zn となる自然数の組 (x, y, z) は存在しない、という定理を「○○の最終定理」という");
      puts("0.ピタゴラス 1.オイラー 2.プラトン 3.フェルマー");
      scanf("%d",ans);
      if(ans==3){    
    puts("正解です");

    A.HP-=You.attack;

    puts("敵にダメージ!");
      }
      else{
    puts("不正解です");

    You.HP-=A.attack;

    puts("【!】敵の攻撃!");
      }

      flag[9]=1;


    }
  }while(You.HP>=0||A.HP>=0);




  //こっから先はクリアした場合のみ表示される。

  time_t current =time(NULL);
  struct tm*timer=localtime(&current);
  char *wday_name[]={"日","月","火","水","木","金","土"};

  FILE *fp;

  fp=fopen("file.txt","w");
  if((fp)==NULL){
    printf("cannnot open file");
  }

  else{
    printf("wrote the result.");
    fprintf(fp,"クリアしました!\nクリア日時:%d年%d月%d日(%s)%d時%d分%d秒",
        timer->tm_year+1900,timer->tm_mon+1,
        timer->tm_mday,wday_name[timer->tm_wday],timer->tm_hour,
        timer->tm_min,timer->tm_sec
        );

    fclose(fp);

  }

  return (0);
}

このプログラムなのですが(まだ作り始めですが・・・)、コンパイルは通るのですが、プログラム実行時にクイズの答えを入力すると(クイズに対し例えば「1」と入力すると)cmdの動作が停止(フリーズ)してしまいます。回答が間違っている時も合っているときもフリーズしてしまいます。理由がわからず困っております。どのようにすれば解決できるでしょうか。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

scanfの使い方が間違っています。
scanf("%d", &ans);
に直しましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/15 22:24

    あ、それと使ってもいないのに
    #define RAND_MAX 0x7fffffffを再定義しているのはなぜでしょうか
    有害なのでやめたほうがいいです。もしくは再定義しても乱数域は広がりませんよ?

    キャンセル

  • 2017/12/15 22:46

    ありがとうございます。既に定義されているというのを知りませんでした汗

    キャンセル

  • 2017/12/15 22:47

    というか使ってませんでした...

    キャンセル

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

ただいまの回答率

91.24%

関連した質問

  • 解決済

    cp -r コマンドのC言語による実装

    前提・実現したいこと ls -r コマンドのC言語のソースコードを参考にして cp -r コマンドを実装しているのですが どこを変えていいのかわかりません… 該当のソー

  • 解決済

    C言語 キューの問題の解答が分かりません。

    C言語の勉強をやり始めて二か月の者です。 今、キューの問題を解いているのですが、解答が分かりません。この問題の解説はあるのですが、読んでも理解するのが難しくコードが書けません。

  • 受付中

    盤面とそれの開き方について

    前提・実現したいこと ここに質問したいことを詳細に書いてください cでマインスイーパー作成を作成しています。 発生している問題・エラーメッセージ 最初からばんめんにいく

  • 解決済

    C言語 簡易関数電卓作成 エラーばかり

    プログラミング初心者です。 c言語で電卓を作成してみましたが、うまく動いてくれません。 コンパイルできない。 エラー個所をコメントアウトして実行すると、一文字入力後操作を受

  • 解決済

    JavaScriptでクイズを作成したい

    前提・実現したいこと javaScriptで、クイズを作成したいと思っています。 問題表示→正誤・解説表示→次の問題…というようにページが遷移してくようにつくりたいです。また、

  • 解決済

    文字列のプログラムについて

    Cを使って3つの文字列を入力し一番文字数が最多の文字列を出力する(ただし最多の数と同じ数の文字列がある場合同じ数の文字列をすべて出力) というプログラムを作っているのですが今文字数

  • 解決済

    c言語 リスト構造について...

    前提・実現したいこと 最近C言語でリスト構造を勉強したので自己流でリスト構造のプログラムを作成したのですが正常に作動しません。どなたか解決法を教えてください。 説明不足だったの

  • 受付中

    Java で以下のコードを書いています。 なぜエラーになるのかわかりません。助けてください。

    以下の課題について質問です。 The local Driver's license office has asked you to write a program that gra

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

  • C

    2701questions

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