○×問題を作成しているのですが、12問目で「1」を入力すると zsh: segmentation fault がでます。
プログラミングは以下の通りで、問題の文章、正解の時のif(ans==___)のアンダーバーの部分が異なります。
文字数の都合で一部のプログラミングは削除してます。
#include "stdio.h"
int main(void)
{
int tr=0,failed=0,ans,t,f[failed];
float par;
printf("いまから表示される問題は、文章のみによる○×問題です。\n文章が正解だと思う場合には「0」,間違いだと思う場合には「1」を入力してください。\nなお、一度回答したものは、訂正はできないので、きちんと考えてから回答しましょう\n\n\n");
printf("第1問\n チャイルドシートを正しく着用していれば、事故にあったときに負傷が軽減される。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 1;
}
printf("第2問\n 制限速度内であれば、急発進、急ブレーキ等をしても良い。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 2;
}
printf("第3問\n 事故を起こした運転者は、刑事上の責任は負うが、民事上の責任は保険会社が負う。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 3;
}
printf("第4問\n 車を運転するときは、動きやすい服装を着る。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 4;
}
printf("第5問\n 二輪車は道が渋滞しているときは、路側帯を通行しても良い。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
f[failed] = 5;
} else {
failed += 1;
}
printf("第6問\n 道路上で、酒によってふらついたり、立ち話をしたり、座ったり、寝そべったりなどしてはいけない。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 6;
}
printf("第7問\n 運転中、サラリーマンが、会社に用事ができたので携帯電話を使用して運転した。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 7;
}
printf("第8問\n 信号機は青信号の交差点で、警察が止まれをしていたが、無視して左折した。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 8;
}
printf("第9問\n 手の合図で、窓から右手を水平に出しているときは、停止か徐行の合図である。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 9;
}
printf("第10問\n 歩行者、自転車専用の信号が青になったら、自転車も一緒に信号に従う。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 10;
}
printf("第11問\n 交差点とその手前30m以内は、自動車や原動付き自転車を追い越してはいけない。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 11;
}
printf("第12問\n 一方通行で交差点付近を走行中、後方より緊急自動車が来たときは、交差点をさけて左側に寄って停止した。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 12;
}
printf("第13問\n オートマチック車で後退するときは、後ろを確認して、シフトをリバース(R)に入れて、\nハンドブレーキを話し、フットブレーキを徐々に離して、確認しながら静かにアクセルを踏む。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 13;
}
printf("第14問\n 同一方向に3車線の通行隊があるときは、最も右側の車両通行帯は追い越し等のためにあけておき、\n他の車線は速度の速い遅いに関わらず、どちらでも通行して良い。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 14;
}
printf("第15問\n 信号機で交通整理が行われている見通しの悪い交差点で、信号機は青信号だったので、徐行しないで通過した。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 15;
}
printf("第16問\n 進行方向が渋滞していたので、やむを得ず、横断歩道、自転車横断隊に停止した。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 16;
}
printf("第17問\n 路面電車の停留所を通るとき、乗り降りする人がいたが、安全地帯があったので、徐行して通過した。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==0)
{
tr += 1;
} else {
failed += 1;
f[failed] = 17;
}
printf("第18問\n 車から、空き缶は捨ててはいけないが、吸いがらや紙屑は捨てて良い。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 18;
}
printf("第19問\n 後退合図は、3秒前にする。\n ○か×か?(○は0,×は1を入力)\n");
scanf("%d",&ans);
if (ans==1)
{
tr += 1;
} else {
failed += 1;
f[failed] = 19;
}
printf("第36問\n 道路が濡れていると、滑りやすくなるので、停止距離は長くなる。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 36; } printf("第37問\n オートマチック車は、下り坂を走行するときには、燃費を良くするためにシフトを\nニュートラル(N)に入れて、フットブレーキを使って走行する。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 38; } printf("第38問\n オートマチック車で、下り坂でエンジンブレーキを使うときはギアをS(2)に入れて、さらに強力なエンジンブレーキを効かすときは、L(1)に入れて下る。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 39; } printf("第39問\n 横断歩道の手前に停止している車の横を通過するときは、飛び出しがないか徐行して運転する。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 40; } printf("第40問\n 初心者マークのついている車や仮免許練習中の標識をつけている運転者が運転が上手くなるように、幅寄せや割り込みをしても良い。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 41; } printf("第41問\n 集団で運転するときは、連絡を取り合うために、並進走行をしても良い。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 41; } printf("第42問\n 車を進路変更するときは、ハンドルを切りながら方向指示器を出す。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 42; } printf("第43問\n 道路外の施設に入るとき、歩行者が明らかにいないときは、一時停止しないで徐行する。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 43; } printf("第44問\n 大型免許を受験する条件は、普通免許を取得して、3年経過していれば、年齢制限はない。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 44; } printf("第45問\n オートマチック車で、エアコンを使用している時、エンジン始動時は、エンジンの回転数が高回転に設定してあるので急発進しやすい。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 45; } printf("第46問\n 自動車損害賠償責任保険又は責任共済証明書は、車に備えておく。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 46; } printf("第47問\n 大人と子供がを繋いでいる標識では、自転車も走行できる:1。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==1) { tr += 1; } else { failed += 1; f[failed] = 47; } printf("第48問\n 山から小さいものが降ってきている標識は落石注意の標識である:0。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 48; } printf("第49問\n 黄色い中央線をはみ出してはいけない。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 49; } printf("第50問\n 手を上げている警察官に対面する交通は、赤信号である。\n ○か×か?(○は0,×は1を入力)\n"); scanf("%d",&ans); if (ans==0) { tr += 1; } else { failed += 1; f[failed] = 50; } par = (tr*100)/50 ; printf("正解数%d\n 誤数%d\n正答率:%3.2f\n間違えた問題は",tr,failed,par); for (t=1; t<failed; t++) { printf("第%d問\n",f[failed]); } return 0;
}

回答4件
あなたの回答
tips
プレビュー