ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示