< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> < 40> < 41> < 42> < 43> < 44> < 45> < 46> < 47> < 48> < 49> < 50> < 51> < 52> < 53> < 54> < 55> < 56> < 57> < 58> < 59> < 60> < 61> < 62> < 63> < 64> < 65> < 66> < 67> < 68> < 69> < 70> < 71> < 72> < 73> < 74> < 75> < 76> < 77> < 78> < 79> < 80> < 81> < 82> < 83> < 84> < 85> < 86> < 87> < 88> < 89> < 90> < 91> < 92> < 93> < 94> < 95> < 96> < 97> < 98> < 99> <100> <101> <102> <103> <104> <105> <106> <107> <108> <109> <110> <111> <112> <113> <114> <115> <116> <117> <118> <119> <120> <121> <122> | #include <stdlib.h> #include <string.h> #include <time.h> int SJISMultiCheck(unsigned char c){ if(((c>=0x81)&&(c<=0x9f))||((c>=0xe0)&&(c<=0xfc)))return 1; else return 0; } int SelectQuestion(const char (*question)[2][64],size_t question_cnt,char *hint,size_t hint_cnt){ /******************************************** 乱数を使って問題を選択して表示する 戻り値:0以上:選択された問題のID -1:失敗 const char (*question)[2][64]:選択対象の問題セット。 size_t question_cnt:questionの要素数 char *hint:[出力]ヒント文字列を格納する領域 size_t hint_cnt:hintの要素数 ********************************************/ int i,sel_question; sel_question=rand()%question_cnt; if(hint_cnt<=strlen(question[sel_question][1]))return -1; hint[0]='\0'; puts(question[sel_question][0]); for(i=0;question[sel_question][1][i]!='\0';){ if(SJISMultiCheck(question[sel_question][1][i])){ strcat(hint,"*"); i+=2; } else{ strcat(hint,"*"); i++; } } return sel_question; } int main(void){ //ソース上に直接書き込んだ問題 char question[10][2][64]={ {"「プログラム」を英語で書くと?","program"}, {"日本で一番高い山は?","富士山"}, {"3*5=","15"}, {"「library」をカタカナ読みすると?","ライブラリ"}, {"日本の都道府県の数は?","47"}, {"「檸檬」はなんて読む?","れもん"}, {"「万」の上の単位は?","億"}, {"「迎撃」はなんて読む?","げいげき"}, {"22+33*5=","187"}, {"「メモリ」を英語で書くと?","memory"} }; //選択された問題 int sel_question; //入力された答え char player_ans[80]=""; //ヒント文字列 char hint_str[80]=""; //ループカウンタ用一時変数 int i,j; //正解文字列の長さ用一時変数 int ans_len; //入力文字列の長さ用一時変数 int player_len; srand(time(NULL)); //機能「乱数を使って選択し表示します」 sel_question=SelectQuestion(question,10,hint_str,80); while(1){ //機能「ヒント文字列の表示」 printf("ヒント:%s\n",hint_str); //機能「その問題の答えをプレイヤーはキーボードから入力」 fgets(player_ans,79,stdin); //機能「ヒント文字列の更新」 ans_len=strlen(question[sel_question][1]); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(question[sel_question][1][j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==question[sel_question][1][i])&& (player_ans[i+1]==question[sel_question][1][i+1])){ hint_str[i]=question[sel_question][1][i]; hint_str[i+1]=question[sel_question][1][i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==question[sel_question][1][i]){ hint_str[i]=question[sel_question][1][i]; } i++; } } } //機能「成否を判定します」 if(player_ans[0]!='\0')player_ans[strlen(player_ans)-1]='\0'; if(!strcmp(player_ans,question[sel_question][1]))break; puts("違います。もう一度入力してください。"); } //機能「クリア表示して終了」 puts("正解です。Enterを押すと終了します。"); //終了待ち getchar(); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> | /*********************************************** ヒント文字列を入力された答えに合わせて更新する。 const char question[2][64]:選択されている問題 const char *player_ans:入力された答え char *hint_str:[入出力]更新するヒント文字列 ***********************************************/ ans_len=strlen(question[sel_question][1]); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(question[sel_question][1][j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==question[sel_question][1][i])&& (player_ans[i+1]==question[sel_question][1][i+1])){ hint_str[i]=question[sel_question][1][i]; hint_str[i+1]=question[sel_question][1][i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==question[sel_question][1][i]){ hint_str[i]=question[sel_question][1][i]; } i++; } } } } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> | /*********************************************** ヒント文字列を入力された答えに合わせて更新する。 const char question[2][64]:選択されている問題 const char *player_ans:入力された答え char *hint_str:[入出力]更新するヒント文字列 ***********************************************/ int i,j,ans_len,player_len; ans_len=strlen(question[sel_question][1]); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(question[sel_question][1][j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==question[sel_question][1][i])&& (player_ans[i+1]==question[sel_question][1][i+1])){ hint_str[i]=question[sel_question][1][i]; hint_str[i+1]=question[sel_question][1][i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==question[sel_question][1][i]){ hint_str[i]=question[sel_question][1][i]; } i++; } } } } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> | /*********************************************** ヒント文字列を入力された答えに合わせて更新する。 const char question[2][64]:選択されている問題 const char *player_ans:入力された答え char *hint_str:[入出力]更新するヒント文字列 ***********************************************/ int i,j,ans_len,player_len; ans_len=strlen(question[1]); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(question[1][j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==question[1][i])&& (player_ans[i+1]==question[1][i+1])){ hint_str[i]=question[1][i]; hint_str[i+1]=question[1][i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==question[1][i]){ hint_str[i]=question[1][i]; } i++; } } } } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> < 40> < 41> | /*********************************************** ヒント文字列を入力された答えに合わせて更新する。 const char question[2][64]:選択されている問題 const char *player_ans:入力された答え char *hint_str:[入出力]更新するヒント文字列 ***********************************************/ int i,j,ans_len,player_len; const char *answer_str; answer_str=question[1]; ans_len=strlen(answer_str); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(answer_str[j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==answer_str[i])&& (player_ans[i+1]==answer_str[i+1])){ hint_str[i]=answer_str[i]; hint_str[i+1]=answer_str[i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==answer_str[i]){ hint_str[i]=answer_str[i]; } i++; } } } } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> < 40> < 41> < 42> < 43> < 44> < 45> < 46> < 47> < 48> < 49> < 50> < 51> < 52> < 53> < 54> < 55> < 56> < 57> < 58> < 59> < 60> < 61> < 62> < 63> < 64> < 65> < 66> < 67> < 68> < 69> < 70> < 71> < 72> < 73> < 74> < 75> < 76> < 77> < 78> < 79> < 80> < 81> < 82> < 83> < 84> < 85> < 86> < 87> < 88> < 89> < 90> < 91> < 92> < 93> < 94> < 95> < 96> < 97> < 98> < 99> <100> <101> <102> <103> <104> <105> <106> <107> <108> <109> <110> <111> <112> <113> <114> <115> <116> <117> <118> <119> <120> <121> <122> <123> <124> <125> <126> <127> <128> <129> <130> | #include <stdlib.h> #include <string.h> #include <time.h> int SJISMultiCheck(unsigned char c){ if(((c>=0x81)&&(c<=0x9f))||((c>=0xe0)&&(c<=0xfc)))return 1; else return 0; } int SelectQuestion(const char (*question)[2][64],size_t question_cnt,char *hint,size_t hint_cnt){ /******************************************** 乱数を使って問題を選択して表示する 戻り値:0以上:選択された問題のID -1:失敗 const char (*question)[2][64]:選択対象の問題セット。 size_t question_cnt:questionの要素数 char *hint:[出力]ヒント文字列を格納する領域 size_t hint_cnt:hintの要素数 ********************************************/ int i,sel_question; sel_question=rand()%question_cnt; if(hint_cnt<=strlen(question[sel_question][1]))return -1; hint[0]='\0'; puts(question[sel_question][0]); for(i=0;question[sel_question][1][i]!='\0';){ if(SJISMultiCheck(question[sel_question][1][i])){ strcat(hint,"*"); i+=2; } else{ strcat(hint,"*"); i++; } } return sel_question; } void HintUpdate(const char question[2][64],const char *player_ans,char *hint_str){ /*********************************************** ヒント文字列を入力された答えに合わせて更新する。 const char question[2][64]:選択されている問題 const char *player_ans:入力された答え char *hint_str:[入出力]更新するヒント文字列 ***********************************************/ int i,j,ans_len,player_len; const char *answer_str; answer_str=question[1]; ans_len=strlen(answer_str); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(answer_str[j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==answer_str[i])&& (player_ans[i+1]==answer_str[i+1])){ hint_str[i]=answer_str[i]; hint_str[i+1]=answer_str[i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==answer_str[i]){ hint_str[i]=answer_str[i]; } i++; } } } } int main(void){ //ソース上に直接書き込んだ問題 char question[10][2][64]={ {"「プログラム」を英語で書くと?","program"}, {"日本で一番高い山は?","富士山"}, {"3*5=","15"}, {"「library」をカタカナ読みすると?","ライブラリ"}, {"日本の都道府県の数は?","47"}, {"「檸檬」はなんて読む?","れもん"}, {"「万」の上の単位は?","億"}, {"「迎撃」はなんて読む?","げいげき"}, {"22+33*5=","187"}, {"「メモリ」を英語で書くと?","memory"} }; //選択された問題 int sel_question; //入力された答え char player_ans[80]=""; //ヒント文字列 char hint_str[80]=""; srand(time(NULL)); //機能「乱数を使って選択し表示します」 sel_question=SelectQuestion(question,10,hint_str,80); while(1){ //機能「ヒント文字列の表示」 printf("ヒント:%s\n",hint_str); //機能「その問題の答えをプレイヤーはキーボードから入力」 fgets(player_ans,79,stdin); //機能「ヒント文字列の更新」 HintUpdate(question[sel_question],player_ans,hint_str); //機能「成否を判定します」 if(player_ans[0]!='\0')player_ans[strlen(player_ans)-1]='\0'; if(!strcmp(player_ans,question[sel_question][1]))break; puts("違います。もう一度入力してください。"); } //機能「クリア表示して終了」 puts("正解です。Enterを押すと終了します。"); //終了待ち getchar(); return 0; } |
< 1> < 2> < 3> < 4> < 5> < 6> < 7> < 8> < 9> < 10> < 11> < 12> < 13> < 14> < 15> < 16> < 17> < 18> < 19> < 20> < 21> < 22> < 23> < 24> < 25> < 26> < 27> < 28> < 29> < 30> < 31> < 32> < 33> < 34> < 35> < 36> < 37> < 38> < 39> < 40> < 41> < 42> < 43> < 44> < 45> < 46> < 47> < 48> < 49> < 50> < 51> < 52> < 53> < 54> < 55> < 56> < 57> < 58> < 59> < 60> < 61> < 62> < 63> < 64> < 65> < 66> < 67> < 68> < 69> < 70> < 71> < 72> < 73> < 74> < 75> < 76> < 77> < 78> < 79> < 80> < 81> < 82> < 83> < 84> < 85> < 86> < 87> < 88> < 89> < 90> < 91> < 92> < 93> < 94> < 95> < 96> < 97> < 98> < 99> <100> <101> <102> <103> <104> <105> <106> <107> <108> <109> <110> <111> <112> <113> <114> <115> <116> <117> <118> <119> <120> <121> <122> <123> <124> <125> <126> <127> <128> <129> <130> | #include <stdlib.h> #include <string.h> #include <time.h> int SJISMultiCheck(unsigned char c){ if(((c>=0x81)&&(c<=0x9f))||((c>=0xe0)&&(c<=0xfc)))return 1; else return 0; } int SelectQuestion(const char (*question)[2][64],size_t question_cnt,char *hint,size_t hint_cnt){ /******************************************** 乱数を使って問題を選択して表示する 戻り値:0以上:選択された問題のID -1:失敗 const char (*question)[2][64]:選択対象の問題セット。 size_t question_cnt:questionの要素数 char *hint:[出力]ヒント文字列を格納する領域 size_t hint_cnt:hintの要素数 ********************************************/ int i,sel_question; sel_question=rand()%question_cnt; if(hint_cnt<=strlen(question[sel_question][1]))return -1; hint[0]='\0'; puts(question[sel_question][0]); for(i=0;question[sel_question][1][i]!='\0';){ if(SJISMultiCheck(question[sel_question][1][i])){ strcat(hint,"*"); i+=2; } else{ strcat(hint,"*"); i++; } } return sel_question; } void HintUpdate(const char question[2][64],const char *player_ans,char *hint_str){ /*********************************************** ヒント文字列を入力された答えに合わせて更新する。 const char question[2][64]:選択されている問題 const char *player_ans:入力された答え char *hint_str:[入出力]更新するヒント文字列 ***********************************************/ int i,j,ans_len,player_len; const char *answer_str; answer_str=question[1]; ans_len=strlen(answer_str); player_len=strlen(player_ans); j=0; for(i=0;(i<ans_len)&&(i<player_len);){ while(j<i){ if(SJISMultiCheck(answer_str[j]))j+=2; else j++; } if(i!=j){ if(SJISMultiCheck(player_ans[i]))i+=2; else i++; } else{ if(SJISMultiCheck(player_ans[i])){//日本語文字の場合 if((player_ans[i]==answer_str[i])&& (player_ans[i+1]==answer_str[i+1])){ hint_str[i]=answer_str[i]; hint_str[i+1]=answer_str[i+1]; } i+=2; } else{//半角文字の場合 if(player_ans[i]==answer_str[i]){ hint_str[i]=answer_str[i]; } i++; } } } } int main(void){ //ソース上に直接書き込んだ問題 char question[10][2][64]={ {"「プログラム」を英語で書くと?","program"}, {"日本で一番高い山は?","富士山"}, {"3*5=","15"}, {"「library」をカタカナ読みすると?","ライブラリ"}, {"日本の都道府県の数は?","47"}, {"「檸檬」はなんて読む?","れもん"}, {"「万」の上の単位は?","億"}, {"「迎撃」はなんて読む?","げいげき"}, {"22+33*5=","187"}, {"「メモリ」を英語で書くと?","memory"} }; //選択された問題 int sel_question; //入力された答え char player_ans[80]=""; //ヒント文字列 char hint_str[80]=""; srand(time(NULL)); //機能「乱数を使って選択し表示します」 sel_question=SelectQuestion(question,10,hint_str,80); while(1){ //機能「ヒント文字列の表示」 printf("ヒント:%s\n",hint_str); //機能「その問題の答えをプレイヤーはキーボードから入力」 fgets(player_ans,79,stdin); if(player_ans[0]!='\0')player_ans[strlen(player_ans)-1]='\0'; //機能「ヒント文字列の更新」 HintUpdate(question[sel_question],player_ans,hint_str); //機能「成否を判定します」 if(!strcmp(player_ans,question[sel_question][1]))break; puts("違います。もう一度入力してください。"); } //機能「クリア表示して終了」 puts("正解です。Enterを押すと終了します。"); //終了待ち getchar(); return 0; } |