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

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

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

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

Q&A

2回答

1669閲覧

ラックナンバーリサーチで

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2016/01/06 04:14

編集2016/01/09 00:59

c

1//ラックナンバーサーチ・トレーニングでベストテンを選び出すフローチャート 2以下のように変更しましたが、うまくいきません。おしえてください。お願いします。 3 4// 1, ラックナンバーサーチ・トレーニングで実行した日付と実行時間が 5// char dtfile[] = "LACKNUM.DAT" に入っている 6 7// 2, 並べ替え前の"LACKNUM.DAT"を表示する。 8 9// 3, truct tm localとdouble bestの要素を持つ構造体を定義する。 10 11// 4, LACKNUM.DATに保存されているデータを記録するのに 12// 十分な数の配列dtfile2を確保。 13 14 15// 5, その配列へget_data()関数にて読み込んで下さい。 16 17 18// 6, LACKNUM.DATに保存されているデータを並べ替えて表示する 19// を確保して下さい。 20 21// 7, "LACKNUM.DAT"を"best"の小さい順に並べ替えて 22 23// 8, "LACKNUM2.DAT"を表示する。 24 25 26// ラックナンバーサーチ・トレーニング(1部です。必要ないところもあります) 27#include <stdio.h> 28#include <time.h> 29#include <float.h> 30#include <ctype.h> 31#include <stdlib.h> 32#include <sys/types.h> 33#include <unistd.h> 34#include "getputch.h" 35 36#define MAX_STAGE 3 37#define swap(type, x, y) do { type t = x; x = y; y = t; } while (0) 38#define MAX_NUM 10 39 40char dtfile[100] = "LACKNUM.DAT"; // 元のファイル名 41char dtfile2[100] = "LACKNUM2.DAT"; // 実行時間順に並べたファイル名 42 43typedef struct { 44 struct tm local; 45 double best; 46}time_besten; 47 48 //ソートしたい配列の要素番号列を保存し,実際にソートされる配列 49 //動的に確保される 50 51//"LACKNUM.DAT"を "LACKNUM2.DAT"にコピーする。bcopyでコピーする 52// その配列へget_data()関数にて読み込んで下さい。 53 54 55double get_data1(void){ 56 int i; 57 FILE *fp; 58 double best; 59 char title[256]; 60 puts(title); 61 //int puts(char * s); 62 //puts 関数は標準出力に s が指す文字列を書き込みます. 63 //(出力の最後に自動的に改行文字を追加します.) 64 //文字列の終端ナル 65 if ((fp = fopen(dtfile, "rb")) == NULL) { 66 printf("ファイルを作成します。\n\n"); 67 best = DBL_MAX; /* float.hに定義されている。double型で表現できる最大値を表すマクロDBL_MAX */ 68 }else { 69 int i; 70 struct tm local; 71 72 while((i = fread(&local, sizeof(struct tm), 1, fp)) > 0 ){ 73 printf("%d年 %d月 %d日 %d時 %d分 %d秒\n", 74 local.tm_year + 1900, local.tm_mon + 1, 75 local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec); 76 fread(&best, sizeof(double), 1, fp); 77 printf("得点(所要時間)は%.1f秒\n\n", best); 78 } 79 fclose(fp); 80 } 81 printf("\n"); 82} 83 84double get_data2(void) 85{ 86 int i; 87 FILE *fp2; 88 double best2; 89 char title[256]; 90 puts(title); 91 //int puts(char * s); 92 //puts 関数は標準出力に s が指す文字列を書き込みます. 93 //(出力の最後に自動的に改行文字を追加します.) 94 //文字列の終端ナル 95 96 if ((fp2 = fopen(dtfile2, "rb")) == NULL) { 97 printf("ファイルを作成します。\n\n"); 98 best2 = DBL_MAX; /* float.hに定義されている。double型で表現できる最大値を表すマクロDBL_MAX */ 99 } else { 100 int i; 101 struct tm local; 102 103 while((i = fread(&local, sizeof(struct tm), 1, fp2)) > 0 ){ 104 printf("%d年 %d月 %d日 %d時 %d分 %d秒\n", 105 local.tm_year + 1900, local.tm_mon + 1, 106 local.tm_mday, local.tm_hour, local.tm_min, local.tm_sec); 107 fread(&best2, sizeof(double), 1, fp2); 108 printf("得点(所要時間)は%.1f秒\n\n", best2); 109 } 110 fclose(fp2); 111 } 112 printf("\n"); 113 114} 115 116int compfuncBest(const void *a, const void *b) 117{ 118 double comp; 119 comp = ((time_besten*)a)->best - ((time_besten*)b)->best; 120 // time_besten型のポインタにキャストしてからメンバbestで比較 121 122 if (comp<0.) return -1; 123 else if (0.<comp) return 1; 124 else return 0; 125} 126 127int main(void) 128{ 129 int i,num; 130 FILE *fp; // *fpと *fp3はファイルポインタ 131 double best; 132 time_besten besten;//time_besten besten;を配列として定義する。 133 time_t t = time(NULL); 134 struct tm *local = localtime(&t); 135 int *index; 136 137 int DataSize=sizeof(int); 138 int NumberOfDatas=sizeof(dtfile2)/sizeof(time_besten); 139 printf("size of (int)= %d\n",sizeof(int)); 140 printf("size of (double)= %d\n",sizeof(double)); 141 printf("size of (time_besten)= %d\n",sizeof(time_besten)); 142 printf("size of (struct tm)= %d\n",sizeof(struct tm)); 143 printf("\n"); 144 145 index=(int *)malloc(NumberOfDatas*sizeof(int)); 146 for (i=0; i<NumberOfDatas; i++) index[i]=i; 147 148 get_data1(); 149 150 qsort(index, NumberOfDatas, DataSize, compfuncBest); 151 get_data2(); 152 153 free(index); 154 155 return 0; 156} 157 158/* 159....@naka ~/besten 160$ gcc -o best-fchart7 best-fchart7.c -lpdcursesw 161 162....@naka ~/besten 163$ best-fchart5 164初期状態 1652015年 10月 27日 19時 9分 59秒 166得点(所要時間)は11.0秒 167 1682016年 1月 4日 19時 15分 11秒 169得点(所要時間)は8.0秒 170 1712016年 1月 4日 19時 16分 8秒 172得点(所要時間)は9.0秒 173 1742016年 1月 4日 19時 16分 39秒 175得点(所要時間)は10.0秒 176 1772016年 1月 4日 19時 19分 7秒 178得点(所要時間)は10.0秒 179 1802016年 1月 4日 19時 21分 11秒 181得点(所要時間)は10.0秒 182 1832016年 1月 4日 19時 21分 44秒 184得点(所要時間)は8.0秒 185 186 187ベストテン時間)は8.0秒 188 189 1902015年 10月 27日 19時 9分 59秒 191得点(所要時間)は11.0秒 192 1932016年 1月 4日 19時 15分 11秒 194得点(所要時間)は8.0秒 195 1962016年 1月 4日 19時 16分 8秒 197得点(所要時間)は9.0秒 198 1992016年 1月 4日 19時 16分 39秒 200得点(所要時間)は10.0秒 201 2022016年 1月 4日 19時 19分 7秒 203得点(所要時間)は10.0秒 204 2052016年 1月 4日 19時 21分 11秒 206得点(所要時間)は10.0秒 207 2082016年 1月 4日 19時 21分 44秒 209得点(所要時間)は8.0秒 210 211...@naka ~/besten 212$ 213 214 215//並べ替えはquicksortを使う 216//並べ替え後の"LACKNUM2.DAT"を表示する。 217 218*/

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

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

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

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

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

guest

回答2

0

とりあえず、fopen() のエラー処理の最初に perror() を入れて、どのような種類のエラーが出ているか調べてはどうでしょう?
(fprintf で errno を出させてもいいですが)

投稿2016/01/06 06:02

kozuchi

総合スコア1193

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

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

退会済みユーザー

退会済みユーザー

2016/01/06 06:27

ご指摘のとおり実行したところ以下のようになりました .....@naka~/besten $ bcopy1 dtfile dtfile3 c:\Users\username\chap09\besten\bcopy1.exe: No error ファイルdtfileがオープンできません。
kozuchi

2016/01/06 07:54

出力を見る限り、おそらく if ((fp = fopen(*++argv, "rb")) == NULL) { /* *++argv=const char *filenameも ,"rb"=const char *modeもポインタ */ perror(argv[0]); fprintf(stderr, "ファイル%sがオープンできません。\n", *argv); ・・・ と書かれたと思うのですが、それで、"No error" となると、ちょっと原因がわかりませんね。 fopen() の戻り値が NULL なら、fopen() と perror() の途中で別の処理を行っていない限り、 なんらかのエラーが表示されるはずですが・・・そうならない場合があるとすると、 私の経験の範囲で原因はわからないです。すいません。
退会済みユーザー

退会済みユーザー

2016/01/06 09:57

ありがとうございます。 再度つくり直してアップします。並べなおして表示するつもりのプログラム ですが、同じ表示になります。 並べなおしたデータは別のファイルに保存して、それを表示するようにするのですかね。 よろしくお願いします。
guest

0

こんにちは。この質問の続きですね。

struct tm localとdouble bestの要素を持つ構造体を定義し、

についてクリアされたようです。お疲れ様です。
しかし、まだ下記3点について手がついていないようです。頑張ってください。

  1. LACKNUM.DATに保存されているデータを記録するのに十分な数の配列を確保して下さい。
  2. そして、その配列へget_data()関数にて読み込んで下さい。
  3. 編集欄の上の方に並んでいるB I A ◯ □ '' </>の</>を押してみてください。「ここに言語を入力」のところにC++、「コード」のところにプログラムをコピーアンドペーストすればOKです。

1.について追加のヒントです。time_besten besten;を配列として定義すると良いです。
まずは、要素数をLACKNUM.DATに記録されているデータの数と同じにしておくことをお薦めします。

投稿2016/01/06 12:56

Chironian

総合スコア23272

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

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

退会済みユーザー

退会済みユーザー

2016/01/07 10:38

こんばんわ、いつも丁寧な回答ありがとうございます。 やってみます。時間をすこしください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問