質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

5555閲覧

C言語:エラーメッセージ「bus error」の対処法を教えてください!

tetsutail_study

総合スコア25

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/01/04 09:14

前提・実現したいこと

「キー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を使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ぱっとみただけですが、

for(h=k+1;h<30;k++){

これまちがってます

投稿2021/01/04 09:22

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetsutail_study

2021/01/04 09:27

直したらいけました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問