請問一下程式高手..... 我專案要做快問快答 我現在卡在回答 限三秒內回答 如果在第一秒回答 要怎麼不跑剩下兩秒 或三秒都沒回答 要怎麼判斷沒回答 我知道kbhit可以判斷有沒有輸入 但它沒辦法把輸入存起來 這c語言的問題 請幫幫我吧T.T?

2015-12-30 8:13 pm

回答 (2)

2015-12-30 9:09 pm
2016-01-19 2:55 pm
用執行緒可以嗎?
/----------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> //開啟執行緒
//-----------------------------------------------
//執行緒 讀答案
DWORD WINAPI Get_player_ans(void *arg);
//執行緒 計時
DWORD WINAPI myTimer(void *arg);
//-----------------------------------------------
//overtime_flag
int overtime_flag=0;
//state_flag
int state_flag=0;
//輸入答案
int player_ans;
//-----------------------------------------------
int main()
{
printf("按下Enter進行快問快答");
getchar();
overtime_flag=0;
state_flag=0;
//建立執行緒 題目
HANDLE play;
play = CreateThread(NULL,0,Get_player_ans,NULL,0,NULL);
//建立執行緒 計時
HANDLE time_check;
time_check = CreateThread(NULL,0,myTimer,NULL,0,NULL);
//-------------------------
while(state_flag==0);//等待輸入
int ans=2;//預設解答
if(overtime_flag==0)//時間內作答
{
if(player_ans==ans)
printf("恭喜答對!\n");
else
printf("答錯!\n");
}
else
printf("\n計時到未作答!\n");

CloseHandle(play);
CloseHandle(time_check);
printf("end\n");
system("pause");
return 0;
}
//-----------------------------------------------
DWORD WINAPI Get_player_ans(void *arg)
{
extern int player_ans;
printf("今天星期幾(1~7)?\nAns : ");
scanf(" %d",&player_ans);
state_flag=1;
}
//-----------------------------------------------
DWORD WINAPI myTimer(void *arg)
{
Sleep(3000);//等待3秒
overtime_flag=1;
state_flag=1;
}


收錄日期: 2021-05-04 02:03:33
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20151230121359AAKxZU2

檢視 Wayback Machine 備份