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

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

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

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

Q&A

解決済

1回答

1383閲覧

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

kd3

総合スコア14

C

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

0グッド

0クリップ

投稿2017/12/15 12:45

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の動作が停止(フリーズ)してしまいます。回答が間違っている時も合っているときもフリーズしてしまいます。理由がわからず困っております。どのようにすれば解決できるでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

投稿2017/12/15 13:05

asm

総合スコア15147

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

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

asm

2017/12/15 13:24

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

2017/12/15 13:46

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

2017/12/15 13:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問