• ベストアンサー

パックスペースが出来ません。

 今回ファイル関係の命令(fopenなど)の練習の為、テキストファイルに足跡を書くプログラムを書きました。 [例]右3歩   ***   下2歩   ***       *      *  右、下はすぐ出来たのですが、左、上となると移動する分バックスペースで消さなくてはならなくなったので、  fprintf( fp, "\b" ); を含めたcase文を書きました。  しかし、結果のテキストを見てみると"\b"の部分が|になっていてバックスペースがなされていませんでした。タブの"\t"や改行の"\n"は実行されるのに、バックスペースは出来ません。  そこでなのですが、テキストファイルに出力する場合バックスペースはどうやればよいのでしょうか?  よろしくお願いします。

noname#33727
noname#33727

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.2

http://c-production.com/contents/c/sec01.html カーソルは移動するけど、文字は消えないみたいです。

noname#33727
質問者

お礼

 うーん、そうなんですか?自分のを見ている限り戻ってもいないような・・・。  でも、そのホームページで紹介していた\rが役に立ちそうですね。試してみます。  ご回答、ありがとうございました。

その他の回答 (3)

noname#16581
noname#16581
回答No.4

私なら、以下のように作ります。 char型の2次元配列を用意します。 スペース記号で初期化します。 また現在位置の構造体を用意します。 右に移動すれば、現在位置のxを+1し、左に移動すれば、yを+1します。 移動するときに、移動先を'*'にしていきます。 このあたりの設定は好みです。 移動ごとに 画面をクリアし、(検索してください。) 二次元配列を描画します。 ファイル書き出しも、画面表示と同様です。 画面上のカーソル移動は、 http://hp.vector.co.jp/authors/VA016670/escape_code.html で実現されてはいかがでしょうか?

noname#33727
質問者

お礼

 なるほど、2次元配列ですか。その様なものであればバックスペースが要らないかな、とは考えたのですが2時限配列は思いつかなかったです。というか、2次元じゃないとやっぱり必要になってきますよね、バックスペース・・・。  また、カーソル移動についてのコマンドを初めて見ることが出来ました。あるだろうとは思っていたんです。こんなコマンドなんですね。  貴重なご意見・アドバイス、ありがとうございました。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

ファイルに書き出すんですよね それなら\bでどうなるかはファイルを表示するソフトの設定によるのでは

noname#33727
質問者

お礼

 なるほど、となんとなく分かるんですが、実際にどうすればいいのでしょう?  ちなみにテキストファイルの出力にはwindowsに最初から付いているメモ帳を使っています。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ちなみに, '\b' を出力することでどのような効果が得られると期待しているのでしょうか?

noname#33727
質問者

補足

 コマンドプロンプト同様、バックスペース、つまり前1文字消去です。 [例]***| → "\b" → **|    ※上の「|」はカーソルです

関連するQ&A

  • 2バイト読飛ばして、スペースに置き換えたいです

    Cで、改行がないテキストファイルを800バイト毎に改行を入れることは無事できたのですが、254バイト目と255バイト目に化けている文字があり、それを半角スペース2つに置換したいのですがどうすればよいでしょうか? #include <stdio.h> int main() { FILE *f1,*f2; int i=0; char c; f1 = fopen("afile.txt", "r"); f2 = fopen("bfile.txt", "w"); if (f1 && f2) { while(!feof(f1)) { fscanf(f1, "%c", &c); fprintf(f2, "%c", c); i ++; if (i == 800){ i=0; fprintf(f2, "\n"); } } fclose(f2); fclose(f1); } }

  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • スペース区切りのテキストファイルをExcelで開く

    テキストファイルをExcelファイルとして読み込む必要が多いです 毎回Excelの 開く を使ってテキストファイルを開くのは面倒なので、右クリックの 送る にExcelの実行ファイルをコピーしてそこに送っています ただ、この方式だとスペース区切りで改列出来ず、タブと改行(エンターキー)のみ反映したファイルが開きます 最初からスペース区切りも列区切りにした形でテキストファイルを開く方法(Excelの 開く を使わずに)はないでしょうか

  • fopenの追記モードについて

    宜しくお願いします。 fopenで追記モードでファイルを追記するとき、 FILE *fp; fp = fopen("hogehoge.txt", "a"); fprintf(fp, "aaa\n"); fclose(fp); fopen("hogehoge.txt", "a"); fprintf(fp, "bbb\n"); fclose(fp); と毎回ファイルを開きなおすと、出力結果が bbb aaa となってしまうのですが、 aaa bbb と出来ない物でしょうか?

  • 固定長ファイルの書き込み方法(スペースの場合)

    固定長ファイルの書込み処理で、スペース(長さ=15)を書込む場合、 どうやってやればいいのでしょうか? 以下のようにやるのは、ダサイですよね? fprintf(fp, " "); /* スペースを15コ */ sprintf等の %s 等の方法を変えて、出来ないですよね?

  • テキストファイルの出力について

    今、学校の課題でC言語を使ってプログラムを作っています。 20000個のデータを読み込んで、200個ずつに区切り、別々のテキストファイルで出力するというものです。 最初につくったのは、以下の通りです。 *********************************************** FILE *fp; { int b,i=0; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; fp = fopen("D1.txt","w"); for(i=0;i<=199;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); fp = fopen("D2.txt","w"); for(i=200;i<=399;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); } fclose(fp); ・・・ ***************************************** これだと20000まで繰り返し記述しなければならずかなり困難だと思いました。そこで、ループを作ろうとしたのですが、テキストファイルをループを使って複数作成する方法がわかりません。 以下のようなプログラムを作ったのですが、テキストファイルが一つしか作られませんでした。 どのように記述すればよいのでしょうか? **************************************** FILE *fp; { int a,i=0; int b=1; int c=199; data[0][i]=trend_data[0][i]; data[1][i]=trend_data[1][i]; start: fp = fopen("D[1+b].txt","w"); for(i=a;i<=c;i++){ fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); if(i > c) c = c+200; a = a+200; b++; goto start; fprintf(fp,"%8.8f %8.8f\n",data[0][i],data[1][i]); fclose(fp); } } ****************************************** よろしくお願い致します。

  • ファイルに文字列を書く

    ファイルを2つ読み込んでファイルを書き直そうとしたのですが 2度目に書き込もうとしたときに改行の書き込みがおかしくなってしまいます してほしいところで改行を一回だけしてほしいと思っているのですが 実際には多数改行されます どうしたら改行が一回だけになりますか? ---ソース--- #include <stdio.h> void main(void){ FILE *fp; char *tm[1000]; char buf[400]; int i=1,sei; fp= fopen("now.txt","w+"); fprintf(fp,"もも"); fclose(fp); //何で最初に書き込んでるんだ? //という突っ込みがあるでしょうが本当に作りたいプログラムは最初にファイルに書き込まないといけないためです。 fp= fopen("now.txt","r"); while( fgets( buf, 400, fp ) != NULL ){ tm[0]=(char*)malloc(strlen(buf)+1); strcpy(tm[0], buf); } fclose(fp); fp =fopen("moto.txt","r"); while( fgets( buf, 400, fp ) != NULL ){ if(i<999){ tm[i] = (char*)malloc(strlen(buf+1)); strcpy(tm[i], buf); i++; } else{ tm[999] = (char*)malloc(strlen(buf+1)); strcpy(tm[999], buf); } } fclose(fp); if(i<1000){ sei=i; } else{ sei=1000; } fp =fopen("chat_deta.txt","w+"); for(i=0;i<sei;i++){ fprintf(fp,"%s\n",tm[i]); } if(i!=(sei-1)){ fprintf(fp,"\n"); } for(i=0;i<sei;i++){ free(tm[i]); } fclose(fp); } } ---now.txt--- もも ---moto.txt--- オレンジ みかん

  • スペースは残し改行のみ削除するには?condenceWhite

    テキストフィールドに外部ファイルからテキストファイルを読み込んでいます。 例えば次のようなhtmlタグを含む外部ファイルを読み込みたいとき(アンダーバーはスペースとして見てください) text= 2007.1.1_ほげほげ<br> _________ほげほげ2<br><br> 2007.1.2_ほげほげ<br> _________ほげほげ2 condenceWhite = falseであれば、<br>も含め改行が二回入り、 ================================= 2007.1.1 ほげほげ ________ ほげほげ2 2007.1.2 ほげほげ ________ ほげほげ2 ====================================== と表示されると思います。 改行が二回入るのを防ぐために、condenceWhite = trueにすると、今度は、スペースが消されて ================== 2007.1.1 ほげほげ ほげほげ2 2007.1.2 ほげほげ ほげほげ2 ================== となると思います。 スペースを消さずに余分な改行だけ消す良い方法はないのでしょうか?

    • ベストアンサー
    • Flash
  • fprintfで出力するファイルのパス指定について

    cで以下のコードを書いています。 file.txtを任意の場所に作りたいのですが どうすればいいのでしょうか。 fopen("c:\file.txt", "r"))と書くとエラーになって しまいました。 void main(void) { FILE *fp; if ((fp = fopen("file.txt", "r")) == NULL) { fprintf ( stderr, "err\n" ); exit (2); } fprintf(fp,"%s\n",a);; fclose(fp); }

  • ファイル操作について

    こんばんわ。 fopen関数を用いて、テキストファイル出力を行なっています。 fp = fopen("test.txt","a+"); のように、a+を用いれば、 X1・・・・・ X2・・・・・ X3・・・・・ と、書き込まれた内容が消去されずに書き込まれていきます。この場合、X1,X2,X3は、行単位で実行するたびに書き込まれていきます。 例えば、 X1[タブ]X2[タブ]X3・・・・・ と言うように、X1とX2の間にタブまたはスペースを挿入し、列単位で前回書き込んだ内容を消去せずにファイルへ書き込んでいく方法はありますでしょうか? よろしくお願い致します。

専門家に質問してみよう