質問 |
||
| 質問者:gooaist | tab | |
|---|---|---|
困り度:
|
下のプログラムソースは、jinji.txtの各行の一列目を読み取るプログラムです。 jinji.txtには項目がtabで区切られています。 たとえば、下のようになっています。 番号 tab 姓 tab 名 1 tab 高田 tab 太郎 2 tab 山田 tab 順平 … 300 tab 永井 tab 晃 ソースの真ん中ぐらいに、 while(buff[count]!=' ') とあります。これは最初のtabまで読み取る、つまり一列目を読み取るコードなのですが、tabは「' '」でいいのでしょうか?「' '」でtabだと判断できますか? #include<stdio.h> #define num 100 int main(){ FILE *fp; char buff[num],bango[10]; int count; fp = fopen("jinji.txt","r"); if(fp == NULL) exit(1); fgets(buff,sizeof(buff),fp); count=0; while(buff[count]!=' '){ bango[count]=buff[count]; count++; } //printf("%s\n",bango); fclose(fp); } |
|
質問投稿日時:08/04/29 23:00 質問番号:3986100 |
||
回答良回答20pt |
|
| 回答者:yama5140 | >各行の一列目を読み取るプログラムです。 ★先頭行のみの読み取りとなっています。 while( NULL != fgets( buff, 100, fp ) ){ として 行(レコード)が終わるまで読み込む。 ★ご質問主旨のタブ(デリミタ)の処理は、 #define DLMTR (0x09) // \t while( DLMTR != buff[count] ){ ★文字列の終端処理をする。 bango[count] = 0x00; // 出力直前 //printf("%s\n",bango); |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/30 00:25 回答番号:No.4 |
|
| 参考URL: | http://e-words.jp/p/r-ascii.html |
| この回答へのお礼 | 回答だけではなく、プログラムのミスの指摘をありがとうございました。 >★文字列の終端処理をする。 →教えてくださってありがとうございます。NULLを入れてなかったので、プログラム実行結果に変な文字が出力され、tabの表現が間違っているのかなと思っていましたが、そうではなく、文字列の終端処理が必要だったんですね。ありがとうございました。 |
回答 |
|
| 回答者:gatyan | 他の方が書かれているように、 TAB は '\t' と書いたほうがわかりやすいでしょう トリッキー というか 他の人(時間が経てば自分も)を悩ませたいなら ' [TAB]を押す ' でもいいかと思います 環境にもよりますが、' 'っぽく見えることがあります TABくらいなら、こんな書き方をしても大抵の処理系で大丈夫でしょう、多分 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/04/30 00:22 回答番号:No.3 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:kusa_cw | タブは'\t'となります。 エスケープシーケンスで調べるか、char型の変数に' 'と'\t'を入れて数値として表示させて確認すると良いかと思います。 |
|---|---|
| 種類:回答 どんな人:経験者 自信:参考意見 |
|
| |
回答日時:08/04/29 23:32 回答番号:No.2 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答 |
|
| 回答者:episteme | > tabは「' '」でいいのでしょうか?「' '」でtabだと判断できますか? いちいち訊くより動かしてみりゃわかるんじゃない? # tabは '\t' です。 |
|---|---|
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| |
回答日時:08/04/29 23:20 回答番号:No.1 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |