• ベストアンサー

C言語の制限時間

 現在、C言語で時間制限ありの16進数のクイズを作ろうとしています。 時間内に回答出来なかった場合に強制終了するプログラムを作りたいのですが、 どのように作れば良いでしょうか? ↓動作的にはこんな感じにしたいです 16進数で15は? [入力待ち・・・] (時間内に入力しなかった(応答がなかった)場合) 残念・・・答えはFです。 一応、time関数やfgetsなどいろいろ試してみたのですが、自分の力ではどうも上手く いかなかったので・・・・・・

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

select() 関数をつかうと、タイムアウトを検知できます。 0を待ち合わせるようにすれば 標準入力を待ち合わせることができます。

pocket0173
質問者

お礼

何とか上手く行きました。ありがとうございます。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

処理系に依存せずに実現する方法はありません... といいたいところですが、C11なら、スレッドを使えば標準の範囲で実現できるかもしれませんね。 対応している処理系が実際にあるのかはわかりません。

関連するQ&A

  • C言語 一定時間計る

    C言語で、今クイズを作っています。 プレイヤーに考える時間を与え、その時間が経過したら自動的に不正解というようなソフトを作りたいです。 ただし、この場合一定時間、処理を停止させるのではなく、プレイヤーの入力を待ちながら処理を停止させ、一定時間終わると自動で次の処理(次の問題の表示)に移るようにしたいです。 サンプルソースなどもあればうれしいです。環境はBCCです。回答よろしくお願いします。

  • C++におけるfgets??

    文字列を入力するときに用いるfgets関数ですが、 C++において fgets(char *,n,stdin) と同等の動作をする関数を教えてください。 よろしくお願いします。

  • c言語です。

    c言語です。 現在電話番号入力のプログラムを書いているのですが、うまくいきません。 決まりは18文字以下で、入力できる値が数字1から9と'(',')','-'のみです。 私はあと少しなんですが、うまくプログラムを組めませんでした。 forを使ってやってみたのですがうまくいきません。文字数制限はできたのですが、、 どなたか良い知恵がありましたら教えてください。

  • C言語 関数の戻り値について

    C言語で関数を作る場合に最後にreturnで戻り値を設定しますよね? 自分はあまりそれがわかりません。 関数で出た答えを返すって言うのはわかるんですが、 returnが無くても大丈夫だったりreturnはあってもその後に戻り値を設定していなかったり。 何故returnがなくても動作するのでしょうか? 何故returnまであるのに戻り値は設定されていないのか? 教えてください。

  • fgetsの読み込みは無制限?

    $aaTX = @fopen("aa.txt", "r+" ); $aa = fgets( $aaTX); として、fgetsの第2引数を指定しない場合、読み込む文字数は無制限になるのでしょうか? それとも何文字までという制限がある? 無制限に読み込ませたい場合は、file_get_contentsで読み込んだ方が良いでしょうか?

    • ベストアンサー
    • PHP
  • c言語問題です。よろしくお願い致します。キーボード

    c言語問題です。よろしくお願い致します。キーボードから社会、理科の点数を整数として入力し、高い方の点数を表示しなさい。 (同じ点数の時はどちらの点数が表示されてもよい) なにぶん初心者な者でしてお手数ですが一からプログラミングを作成お願いします (たとえば♯include<stdio.h>からreturn 0;}まで、とか) なるべく早急にお願いいたします。 (fgets関数などの関数は使わずにすむ方法があればそれもお願いできれば)

  • C言語:計算問題を解く時間が計測できません

    C言語を学び始めて1週間程度のものです。 現在柴田望洋著の明解C言語中級編という本でC言語を学んでいます。 その中のプログラミング例を真似してプログラミングしているのですが、 うまく動作しません。詳細は以下の通りです。 著書のList2-6のプログラミングです。 問題:計算問題を解く時間を計測が0.0秒になってしまう。 ここよりプログラミングです。 #include <time.h> #include <stdio.h> #include <stdlib.h> int main (void) { int a, b, c; int x; clock_t start, end; double req_time; srand(time(NULL)); a = 10 + rand() % 90; b = 10 + rand() % 90; c = 10 + rand() % 90; printf("%d + %d + %dは何ですか:", a, b, c); start = clock(); while (1) { scanf("%d", &x); if (x == a + b +c) break; printf("\a違いますよ!!\n再入力してください:"); } end = clock(); req_time = (double)(end - start) / CLOCKS_PER_SEC; printf("%.1f秒かかりました。\n", req_time); if (req_time > 30.0) printf("時間がかかりすぎです。\n"); else if (req_time > 17.0) printf("まあまあですね。\n"); else printf("素早いですね\n"); return (0); } このプログラムを実行して計算を解いて正解の答えを入力しても 0.0秒かかりました。 素早いですね。 としかでてきません。どうすればきちんと時間を計測するプログラミングができるでしょうか。 パソコンはMacbookairを使っています。 コンパイラ(?)はXcodeというものを使っていると思います(ここらへんは勉強不足でよくわかりません。) もしよければご回答お願いします。

  • C言語

    以下のC言語のプログラムを教えてください。 お願いします。 (1)標準入力から文字列(2 文字以上)を入力し,文字数を計上すると共に,入力された文字列の逆順に入れ替える処理を実現してください.なお,以下の要件を満たしたプログラムを作成してください. ・ 入力された文字列は,char 型の配列(要素数50)で受け取ること ・ 文字数を計上するcount 関数(引数:配列のアドレス,戻り値:文字数)を定義 し,main 関数より呼び出すこと ・ 文字列を逆順に入れ替えるreverse 関数(引数:配列のアドレス,戻り値:無し) を定義し,main 関数より呼び出すこと ・ 標準出力の処理は,main 関数で記述すること 【プロトタイプ宣言】 int count(char *str); void reverse(char *str); 【実行結果】 文字列を入力してください(2 文字以上) apple 文字数 = 5 入れ換え前 apple 入れ換え後 elppa (2)char 型の配列(要素数50)を2 つ宣言し,標準入力から2 つの文字列を入力してください.そして,格納した字列を入れ替える関数(swapstr 関数)を作成し,入れ替え前と入れ替え後の配列内の値(文字列)を配列名とともに標準出力するプログラムを作成してください. 【プロトタイプ宣言】 void swapstr(char *str1, char *str2); 【実行結果】 2 つの文字列を入力してください apple strawberry 入れ換え前 配列str1 = apple 配列str2 = strawberry 入れ換え後 配列str1 = strawberry 配列str2 = apple

  • C言語で分からないことがあり、投稿しました。

    C言語で分からないことがあり、投稿しました。 ユーザから2から100までのいずれかの整数を受け取り、1からその数までの総和を計算するプログラムをfor文を使って書け。利用者が範囲外の数値を入力した場合、「値が範囲内にありません」などのエラー表示を行え。ただし、ユーザ定義の関数を1つ使うこと。(ここではfunc1に統一) もしよろしければ、アドバイスいただけると幸いです。

  • c言語について

    C言語のループのところで詰まってしまってわからないので2問ほど教えていただきたいです。 (1)nから1までの自然数を以下のように対角的に印字せよ。 Enter n:20 20 -19 --18 ---17 ・ ・ ・ ・ -----------------3 ------------------2 -------------------1 (2)入力した数に応じたピラミッドを作れ。 (i)奇数の場合 Enter:5 1 12 123 1234 12345 (ii)偶数の場合 Enter:8 1 22 333 4444 55555 666666 7777777 88888888 という問題なんですがわかるかたお願いします。

専門家に質問してみよう