• ベストアンサー

printf("\a");のアラーム音

言語:c #include <stdio.h> int main ( void ) { printf("\a"); return (0); } 上記のプログラムを実行すると、 アラーム音(?)が鳴ります。 音が出ている場所がスピーカからではなくて、 PCの本体から出ているようです。 なぜスピーカから鳴らないのでしょうか。 なぜPC本体から鳴っているのでしょうか。

  • otaks
  • お礼率53% (270/507)

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

環境にもよるのですが…Windowsですか?一般的なPCの場合、 スピーカからなる宇和揺る普通のサウンドの他に、BEEP音源というのがありまして。 こちらはデバイスが違うのでPC本体から直接音が鳴ります。 # 現在では、例えばシステムの異常を通知するような時くらいしか使われないかも。 で、\aにこちらが使われるのは、多分にMS-DOS時代からの歴史的な経緯じゃないかと思います。 昔はコレでも普通でしたし、 \aは「何か音がなればいい」というものであって、どんな音を鳴らすかは別に決まってないですし、 めったに使われないので綺麗なサウンドとか必要ないと思いますし、 OSがおかしくてもなる可能性がBEEPの方が高いかもしれませんし…。

otaks
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

標準出力に'\a'を出力した場合、それは「警報(alert)」ということが決まっているだけで、音が鳴らなければならないわけではありません。 例えば、画面がフラッシュするとか、マウスなどが振動するとか、旗が振られるとか、狼煙が上がるとかでも全く問題ないわけです。 > なぜスピーカから鳴らないのでしょうか。 > なぜPC本体から鳴っているのでしょうか。 まともな音ならスピーカ(PC本体の中にあるか外にあるかは別として)が鳴っているはずです。 それとも、ハードディスクやファンなどの機械音がするとか、そういう話しでしょうか? いずれにしても、正確な環境ぐらいは書きましょう。

otaks
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  •  現在、私は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; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語初心者です。

    C言語初心者です。 1^2-2^2+3^3-4^2…+99^2-100^2の値を求めるプログラムを作成したいのですが上手くいきません。 どこが足りないのですか? #include <stdio.h> int main(void) { printf("%d", 1^2 - 2^2 + 3^2 - 4^2 … + 99^2 - 100^2); return (0); } よろしくお願いします。

  • printf()で出力したいんですが?

    #include <stdio.h> int main( void ) { int air[4]; int i; i = 0; printf( "データ入力\n" ); do{ scanf( "%d\t", &air[ i++ ]); } while(air[ i - 1 ] > 0 ); printf( "%d\n", i ); return 0; } このプログラムはコンパイル出来ますが、期待していたprintf関数での出力ができません。 その理由として何がありますか?関数の使い方が間違っているのか、DO~WHILE文が使えない場所 なのか、もし直すとすればどう直せばいいのですか。

  • フリーソフト

    プログラミングができる日本語のフリーソフトがあれば 教えてください。C言語のプログラムで #include<stdio.h> int main(void) { printf("%d",15+12); return(0); } 簡単なヤツだとこんな感じのプログラムです。

  • printfの使い方

    #include <stdio.h> main() { printf("正しい?"); int a; int b; int c; printfをこのように使うと int がここでは 宣言できないとなってしまうのは何故ですか?

  • 昇順に並べ替えるプログラム(続き)

    (C言語)実行例のような3つの整数を読み込み昇順に並べ替えるプログラムは途中までわかったのですがあとはどう修正・追加をすればいいのでしょうか? 実行例 1:45 2:43 3:38 昇順に並べ替えました。 1:38 2:43 3:45 途中までのプログラム #include<stdio.h> int main(void) { int n1,n2,n3; printf("1:"); scanf("%d",&n1); printf("2:"); scanf("%d",&n2); printf("3:"); scanf("%d",&n3); printf("昇順に並べ替えました。\n"); return 0; }

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

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

  • 配列について

    初歩的な質問ですいませんが、質問よろしくお願いします。 ◎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]' に変換できません。」といったようなエラーが出てしまうか分かりません。 教えていただければ嬉しいです。

  • C言語でscanf()が先に実行されるのはなぜですか?

    C言語でscanf()が先に実行されるのはなぜですか? #include <stdio.h> int main(void){ int intNum; printf("整数を入力してください:\n"); scanf("%d", &intNum); printf("入力値は:%d\n",intNum); return(0); }

  • int型とchar型について

    C言語初心者です。 よろしくお願いします。 ◎1----------------------- #include<stdio.h> int main(void) { int ss[4]="789"; printf("%c\n",ss[0]); return 0; } --------------------------- ◎2----------------------- #include<stdio.h> int main(void) { int *p; p="789"; printf("%c\n",*p); return 0; } --------------------------- ◎1、◎2の2つのプログラムについて疑問があります。 ◎1の「int ss[4]="789";」と◎2の「int *p;」のintの部分は今まで、何の疑問も抱かず、「char」として入力していました。 そこでchar型は1バイトの整数、int型は4バイトの整数ということで容量が違うだけで、intとしても大丈夫だろうと思ったのですが、 ◎1では、「'initializing' : 'char [4]' から 'int [4]' に変換することはできません。」とエラーが出て、◎2では「'char [4]' から 'int *' に変換することはできません。」とエラーが出ます。 intは文字列は扱えないということなのでしょうか? 以上intだと実行できない理由がわかりません。 初歩的なことですいませんが、教えていただけると嬉しいです。