• ベストアンサー

scanfについて

C言語入門者です。基本的な問題で申し訳ないのですが 入力した文字がaの時だけ表示するプログラムを書きました。 scanf("%c", &d); if(d == "a"){ printf("inputed key is %c \n", d); } と書いたのですがコンパイルすると「ポインタと他の型が混在しています」とでてコンパイルが通りません。なでなんでしょうか?dに代入した文字や数値を変数として使う場合はどうしたらいいのでしょうか? どなたかご指導お願いします。m(_ _)m

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

  • ベストアンサー
回答No.2

No.1 の回答の通りですが入門者さんに解説です。 "a" と書くと、文字列定数ですが、コンパイラにとっては char型の配列へのポインタだと解釈されます。 一方 'a' と書くと、char型の定数だと解釈されます。 で、このケースの場合変数dには char型の値が入っていますから比較対照は、同じ char型である 'a' という事になります。 厳密に言えば、C言語には「文字列型」という型は無くて、文字列の終端に'\0'が入った文字(char)型の配列として扱います。とは言え、それでは文字列処理が不便極まりないので、ダブルクォートで囲まれた文字列を書くと、コンパイラが自動的にその文字列と、末尾に'\0'(数値としてのゼロ)が入った定数配列を作ってくれて、そのポインタを書いたものと解釈してくれるという機能があり、プログラムを見やすく書けます。 が、その事を理解して使わないと今回のような失敗を犯しやすいので、注意しましょう。

その他の回答 (1)

  • neo_ap1
  • ベストアンサー率26% (105/395)
回答No.1

"a"は文字列ですので、 if( d == 'a' ){ ではないですか?

関連するQ&A

専門家に質問してみよう