• ベストアンサー

「\b」が使えません;;

「\b」が使えません;; こんばんは。 突然ですが、「\b」が使えません。 例えば、 #include<stdio.h> int main(){ printf("abcde"); printf("\b\b"); printf("ba"); return 0; } を実行すると「abcba」ではなく「abcdebc」と出力されてしまいます。 使っている環境はxcode3.2.2です。 何がおかしいのか教えて下さいm(_ _)m

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

バックスペースは、カーソルを戻すだけです。消去はしません。 また、改行文字は、次の行に移動するもので、(エディタの挿入モードのような)現在のカーソル位置から後が次の行にくることもありません。 なので、カーソルをIで表わすと →printf("abc") abcI →\b\b aIbc →\n abc I となります。

snuke
質問者

お礼

そういう事だったんですか! ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

じっさいにXcodeでビルドして、実行すると、おっしゃるようになりました。 ターミナルでビルドして、実行すると、正しい結果になりました。 まあ、バグということでしょうねえ。

snuke
質問者

お礼

バグですか・・・。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

バックスペースでカーソルが移動するかどうかは、それを[表示する装置]に依存します。 ターミナル.app から実行したら、ちゃんと「abcba」と表示されましたよ

snuke
質問者

補足

サンプルを間違えていました・・・。 申し訳ないです。 #include<stdio.h> int main(){ printf("abc"); printf("\b\b\n"); return 0; } 上を実行すると、「abc」と表示されます。なぜ「a」にならないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • red hat 8.0 の PROGRAMING

    この度、red hat linux 8.0を入れてみたのですが、その環境での C言語の挙動がおかしいのですが、いままでと何か変わったのでしょうか? 例えば、 ---------------------- #include <stdio.h> int main() { printf("AAAA"); return 0; } ---------------------- このような簡単なものを、コンパイルして実行してみると何と驚いたことに、"AAAA" が画面上に出力されません。なぜ??

  • 配列やポインタに文字列を設定することについて

    ◎1------------------------- #include<stdio.h> int main(void) { char ss[80]; scanf("%s",ss); printf("%s\n",ss); return 0; } ---------------------------- ◎2--------------------------- #include<stdio.h> int main(void) { char *ss="abcde"; printf("%s\n",ss); return 0; } ------------------------- ◎3---------------------- #include<stdio.h> int main(void) { char *ss; ss="abcde"; printf("%s\n",ss); return 0; } ------------------------- 以上3つプログラムで疑問をいだいたのですが、 まず◎1で、これは例えば、 cahr ss[80]="abc"; のように配列ssに文字列"abc"そのものを入れているのか、 char *ss="xyz"; のようにまず"xyz"という文字列をメモリ上のどこかに設定し、その先頭番地をssに代入しているのか、どちらの考えでいいのかわかりません。 次に、◎2、3ではどちらも正常に実行できたのですが、特に◎3で「ss="abcde";」と記述していますが、ssにはアドレスを代入するという認識かあるのですが、文字列定数を代入しても問題ないのか?という疑問があります。 教えていただけたら嬉しいです。

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • intとlongは同じ?

    #include <stdio.h> #include <limits.h> int main() { printf("%d\n%d", INT_MAX, LONG_MAX); return 0; } 出力 214783647 214783647 Win7 64bit (VC++2010) CentOS 32bit (gcc) どちらの環境でも同じ出力結果となりました。 intとlongなぜ同じになってしまったのでしょうか。

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎1----------------------------- #include<stdio.h> int main(void) { char ss[10]="AB"; printf("ss=%s\n",ss); return 0; } ------------------------------------ ◎2-------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss[0]='A'; ss[1]='B'; ss[2]=0; printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎3------------------------------- #include<stdio.h> #include<string.h> int main(void) { char ss[10]; strcpy(ss,"AB"); printf("ss=%s\n",ss); return 0; } ----------------------------------- ◎4------------------------------- #include<stdio.h> int main(void) { char ss[10]; ss="AB"; printf("ss=%s\n",ss); return 0; } ---------------------------------- 以上4つのプログラムで、◎2と◎3は正常に動くと理解できたのですが、何故、◎1は正常に動き、◎4は「'const char [3]' から 'char [10]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • パイプってどうやって使うの?

    1つ目のプログラムの出力を2つ目のプログラムで受け取りたいのですが、どうすればいいですか? -- 1 -- #include <stdio.h> #include <windows.h> int main(void){     int a=0;     while(1){         fprintf(stdout,"%d\n",a++);         Sleep(1000);     }     return 0; } これを2のプログラムで受け取ります。 #include <stdio.h> int main(void){     char str[128];     while(1){         if(fgets(str,sizeof(str),stdin)==NULL)             break;     printf("%s",str);     }     return 0; } これをコマンドプロンプトで 1 | 2 と入力してみましたが、何も表示されません・・。 個別に実行すると正常に動作します。 環境はXPです。どうしたら受け渡しが出来るのでしょうか?

  • Visual Stadio でのC言語ですが

    すごい初歩的な質問で申し訳ないのですが 画面にabcdeと表示させるときに通常のコンパイラーだと getchar();と入れなくてもいいのですが VisualStdioだと、これを入れないとコンソール表示をしてくれません。 どうしてなのでしょうか? 決まりといわれてしまえばそれまでなのですが・・・ #include<stdio.h> int main(void) { printf("abcde\n"); getchar(); return 0; }

  • ポインタにによる値の表現と文字列の表現について

    ◎1------------------------------ #include<stdio.h> int main(void) { char *pt="ABC"; printf("pt=%s\n",pt); char dt[10]="ABCDE"; char *pp; pp=dt; printf("pp=%s\n",pp); return 0; } -------------------------------------- ◎2---------------------------------- #include<stdio.h> int main(void) { char *pt="ABC"; printf("*pt=%s\n",*pt); char dt[10]="ABCDE"; char *pp; pp=dt; printf("*pp=%s\n",*pp); return 0; } ----------------------------------- ◎3--------------------------------------- #include<stdio.h> int main(void) { int ary[5]={111,222,333,444,-1}; int* pt=ary; while(1){ printf("%d ",*pt); ++pt; if(*pt==-1){ break; } } puts(""); return 0; } ----------------------------------------------- 以上3つのプログラムで、◎1はprintfで「*」が付いてなく、正常に実行出来ました。 ◎2はprintfで「*」が付いてなく、エラーは出ませんが、文字列が表示されませんでした。 ◎3は文字列ではなく値ですが、printfで「*」が付いていて正常に実行できます。 これは、値の場合は「*pt」とすることで、ptのアドレスに値を代入しているという事で、「printf("%d ",*pt);」で実行できたということですかね? 文字列の場合は、先頭のアドレスを渡すだけなので、「printf("pt=%s\n",pt);」のようにしてアドレスを参照しないとダメであるということですか? ◎2で「printf("*pt=%s\n",*pt);」としてしまうと、何が起きてしまうのかわかりません。 以上、教えていただけると嬉しいです。

  • 1以上の自然数を2つ(それぞれa,b)読み込み、

    a/bの値を少数を使った表現で画面に書き出すプログラムを作成するんですが、 #include <stdio.h> int main(void) {int a,b; double n; scanf("%d", &a); scanf("%d", &b); n=a/b; printf("%d ",n); return 0;} で実行しても、a、bに何を入れても0になっていしまいます。どこが違っているでしょうか?

  • なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのか

    なぜgccはstdio.hをインクルードしなくてもprintfが実行できるのでしょうか。 暗黙にインクルードされるヘッダと されないヘッダファイルの差分等あれば教えていただきたく。。 // main.c int main(){ printf("SWSW\n") ; return 0 ; } % gcc main.c % ./a.out SWSW