お世話になっております。
http://oshiete1.goo.ne.jp/qa3003394.html
上記URLで質問した者です(ご面倒だと思いますが少しご覧下さい)
おかげ様で無事解決し、大変良い勉強になりました。
今度は、
時刻表データを外部ファイルにして動作するようにしろ
と言う上司からの課題なんです。
各箇所にコメント付きの、サンプルソースを見せて頂けると
ありがたいのですが。。。
使ったことの無い関数(fscanf等)が多々出てきて、
期限が明日までということもあり、テンパッてしまっています。
入門書とにらめっこの日々が続いておりますが、
やはり独学では厳しいのでしょうか。。。
みなさんがどのようにしてc言語を覚えたのかも是非お聞きしたいです。
以上、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
★アドバイス
・期限が明日のようですが、fscanf() 関数を利用した参考になるページがあったので
下の『参考URL』に貼っておきます。
fopen、fscanf、fclose を使っています。
かなり参考になると思いますので。
どうぞ。→あとネットで検索すると結構、いいサンプルが見つかりますよ。
参考URL:http://www.geocities.jp/ky_webid/c/036.html
この回答への補足
お世話になってます。
int main(void)
{
char type;
int a, ret;
FILE *fp;
do {
fp = fopen( "jikoku.txt", "r" );
if( fp == NULL )
{
puts( "jikoku.txtが開けません" );
return 1;
}
// 上記の時点でファイルを開いている
static int table[] = { // 時刻表
// もしくはこの時点でファイルを開く?
};
int findtime; // 0000形式に変換後の現在時間
int *search; // テーブル内の検索時間
int h; // 時
int m; // 分
time_t timer; // 現在時刻を取得し地方形式に
struct tm *local;
time(&timer); // 現在時刻の取得
local = localtime(&timer); // 現在時刻を構造体に変換
h = local->tm_hour; // 時
m = local->tm_min; // 分
findtime = h * 100 + m ; // 現在時間を0000形式へ変換
for ( search = table ; *search != -1 ; search++ ) {
// ↑該当時間検索(このfor文も、時刻表を外部ファイル
// にしたことによって意味を成さなくなるのでは。。)
if ( *search > findtime ){
break;
}
}
// 結果表示
if ( *search == - 1 ) { // テーブル内の-1に当たった // ら06:10
printf( "06:10\n\n" );
}
else {
printf( "%02d:%02d\n\n",
(*search / 100), // 「時」取り出し
(*search % 100) ); // 「分」取り出し
}
scanf("%c", &type); // Enterで再度プログラム開始
}
fclose( fp );
while (type == '\n');
}
・上記の箇所でファイルを開けていいのでしょうか?
このようにして、開いたファイルが参照するテーブルとわかるので しょうか
・fgets関数を使おうかと迷ったのですが、char型でないとだめなので しょうか?atoiを使用してint型に変換等の作業が必要なら、fscanf の方がいいのかとも思うのです。
しかしfscanfで読み込む型の指定方法が難しくて。
時間がある時にでもみなさんのご回答頂けたら幸いです。
No.4
- 回答日時:
すでに時間切れかもしれませんが…
・外部ファイルからデータを読めるようにして
・fsacnfを使う
という指定があるのなら、そのデータをどのように表記するかが
決まっているものと思いますがどうなんでしょうか?
fscanfということでバイナリということはまずないと思いますが、
たとえば
#時間 その時間の発着分
6 00 15 30 45
7 0 8 16 24 32 40 48 56
とか、
6:00, 6:15, 6:30, 6:45
7:00, 7:08, 7:16 ...
とか。
あ、ひょっとしてqa3003394 の配列要素の形式そのままですか?
それはさておき、具体的なアドバイスならいいでしょうけど
> と言う上司からの課題なんです。
> 各箇所にコメント付きの、サンプルソースを見せて頂けると
> ありがたいのですが。。。
というのは正直微妙な線だと思います。丸投げ一歩手前という意味で。
上司という言葉が出てくるのなら業務の一環でやっているのでしょうし、
どこかどのようにわからないかを明確にして、その人に訊くことも大切なんじゃないでしょうか。
もちろんその人も業務を抱えているのでいつ何時でも掴まえ手質問攻めにしていい
ということはないでしょうけど。
もし英語を苦にしない、英語でもかまわないというなら、
Google Code Search を使えば、Cのライブラリ関数なんかの使い方の実例は
それこそいくらでも見つかりますよ。
#今やってみたら定義がたくさん引っかかったのでちょっと工夫が要りました
http://www.google.com/codesearch?as_q=%3D+*fscan …
【ハウツー】これは便利! ソースをググれ - "Google Code Search" (1) Google、またも強烈な新サービス | エンタープライズ | マイコミジャーナル
http://journal.mycom.co.jp/articles/2006/10/06/g …
グーグル、コード検索の新サービス「Google Code Search」を発表 - CNET Japan
http://japan.cnet.com/news/media/story/0,2000056 …
参考にするにはいいでしょうが、仕事のコードに持ち込むときはライセンスに要注意ですよ。
> みなさんがどのようにしてc言語を覚えたのかも是非お聞きしたいです。
K&Rくらいしか本が出ていなかったので、そこに載っている問題などで。
フリーソフトウェアのソースを読みまくるってのもやりました。
今のとは違ってそれほど規模が大きくないものが多かったので全部読み通すのも
それほど苦にはなりませんでした。
No.2
- 回答日時:
★アドバイス
・外部ファイルの内容はテキスト形式、バイナリ形式のどちらですか?
これによっても使用する関数が異なりますよ。
・補足要求した『参考URL』にサンプルが載っています。
ただし、fscanf() ではなく fgets() ですが…。
ここの fgets() 部分を fscanf() に置き換えれば外部ファイルから時刻表の
時間を取得できるはずです。まずは、ファイル形式をきちんと考えて、fscanf()の
関数のマニュアルも読み試して見て下さい。そして、上手く期待した動作にならない
ときに質問なんぞしてくださいね。
・下の『参考URL』に fscanf() 関数の解説ページを載せておきます。
まずはご自分でソースを作成してみて下さい。
以上。
参考URL:http://www.bohyoh.com/CandCPP/C/Library/fscanf.h …
No.1
- 回答日時:
★ファイルの読み書きは理解していますか?
・fscanf() 関数の前に fopen()、fclose() の関数の使い方はどの程度ですか?
いきなりですが、補足要求します。
・でも、下の『参考URL』もどうぞ。
参考URL:http://www9.plala.or.jp/sgwr-t/c/sec17.html
この回答への補足
何度もありがとうございます。
fopen関数を使用して開き、そのファイルが無かったらNULLが返るというトコだけ理解できた段階です。
頂いたURLも見ました。
しかし、これを時刻表ソースにどう反映させるのかを考えております。
もっと勉強しなきゃだめですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- 日本語 「~人」と「~名」の使い分け 2 2022/06/02 11:59
- 英語 会社で英語を使うことになっての英語の勉強方法 5 2022/07/03 11:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- 会社・職場 取引先の営業を担当変更させたい。 5 2022/06/07 23:27
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- 大学受験 資格試験などの勉強で過去問題集の解説を理解する時、分からない用語を調べてどうするのが良いですか? 問 3 2023/06/18 17:18
- TOEFL・TOEIC・英語検定 英会話の習得 4 2022/06/05 10:23
- 統計学 学業成績に関する重回帰分析の見方について 4 2022/06/06 17:19
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
なぜデータの整合性を確認する...
-
EXCEL VBAでテキストファイルの...
-
バイナリファイルの比較につい...
-
バイナリエディタのつかいかた
-
入力ファイルをバイナリにする利点
-
MacからWinにファイルを添付す...
-
fwriteでの書き込み
-
C言語とシリアル通信の送受信...
-
【python】Excelファイルを読み...
-
awkの文字列比較はPOSIXロケー...
-
FTPでエクセルをPUTするとファ...
-
エクセルVBA 2千万行のCSVファ...
-
テキストデータをSQLServerに取...
-
バイナリーデータの一部データ...
-
エラー:ストリームの終わりを...
-
バイナリデータ処理
-
C言語でBMPファイルの内容を表...
-
ページ読み込み時に自動的にsub...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
エクセルVBA 2千万行のCSVファ...
-
VBA バイナリ―から文字列にす...
-
ページ読み込み時に自動的にsub...
-
【python】Excelファイルを読み...
-
エラー:ストリームの終わりを...
-
EOF
-
テキストデータをSQLServerに取...
-
MacからWinにファイルを添付す...
-
バイナリエディタのつかいかた
-
リストビュー ⇔ 別ファイル構...
-
入力ファイルをバイナリにする利点
-
24ビットのWaveデータの中身に...
-
FTPでエクセルをPUTするとファ...
-
VB2010 COMポートからのバイナ...
-
バイナリ形式のXMLファイルを読...
-
JavaScriptの実行速度が遅い
-
バッファサイズについて
おすすめ情報