前提・実現したいこと
「キー1つ1つの入力スピードを測定し、その速さの順位を付ける」というプログラムを作りたいのですが、下のような初めて見るエラーが出てしまいました。該当箇所がわかりません。。
キーの入力を受け付けるとこまではいくので、おそらくmain関数の/ソート/以降でエラーになる原因があると考えたのですが、わかりません。原因がわかる方教えてください!
発生している問題・エラーメッセージ
zsh: bus error ./keytime
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <sys/time.h> 5#include "conio.h" 6 7struct eachkey{ 8 int key_num; //キーの位置番号 9 double keytimes; //各キー入力時間保存用 10}; 11 12struct eachkey keys[30]; 13int keyweight[30]; //各キーの重み付け保存用 14char keyplace[30] = {'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l',';','z','x','c','v','b','n','m',',','.','/'}; 15 16double getETime(){ 17 struct timeval tv; 18 gettimeofday(&tv, NULL); 19 return tv.tv_sec + (double)tv.tv_usec*1e-6; 20} 21 22/*指定されたキーが押される時間を計測*/ 23double keytime(char c){ 24 double start, end, time; 25 char getkey; 26 int ec; 27 printf("手をホームポジションにおいて,スペースキーを押してください\n"); 28 while(1){ 29 int space = getch(); 30 if(space == ' ') break; 31 } 32 start = getETime(); 33 printf("「%c」を入力してください>> ", c); 34 while(1){ 35 ec = getch(); 36 if(ec == c) break; 37 } 38 printf("%c\n", ec); 39 end = getETime(); 40 time = end - start; 41 printf("キー入力時間:%lf秒\n", time); 42 return time; 43} 44 45int GetRandom(int min,int max){ 46 return min + (int)(rand()*(max-min+1.0)/(1.0+RAND_MAX)); 47} 48 49/*ランダムにキー入力を受付+時間計測して重み順位付け*/ 50int main(){ 51 int i, n, k, h; 52 struct eachkey tmp; 53 for(i=0;i<30;i++) keys[i].key_num = i; //キーの位置番号設定 54 for(i=0;i<30;i++) keys[i].keytimes = -1; //keytimes初期化 55 for(i=0;i<30;i++){ 56 n = GetRandom(0,29); 57 while(keys[n].keytimes!=-1){ //記録されていないキーを探すs 58 n = GetRandom(0,29); 59 } 60 keys[n].keytimes = keytime(keyplace[n]); 61 } 62 /*ソート*/ 63 for(k=0;k<30;k++){ 64 for(h=k+1;h<30;k++){ 65 if(keys[k].keytimes > keys[h].keytimes){ 66 tmp = keys[k]; 67 keys[k] = keys[h]; 68 keys[h] = tmp; 69 } 70 } 71 } 72 /*重み付け*/ 73 for(i=0;i<30;i++){ 74 keyweight[keys[i].key_num] = i; 75 } 76 /*結果確認用*/ 77 for(i=0;i<30;i++){ 78 printf("%d:%d\n",i,keyweight[i]); 79 } 80 return 0; 81}
補足情報(FW/ツールのバージョンなど)
MacのVScodeを使っています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/04 09:27