• ベストアンサー

Consoleアプリケーションの、「cin >>」について

//一文字入力のつもりで、作ったのですが、 //「abcd」と打って、Enterすると、 //「a」→「A」 //「b」→「B」 //「c」→「C」 //「d」→「D」 //と、連続変換するのですが、 // cin >> -- ; というのは、 //どういうことでしょうか? // すみません、初心者です。 // よろしくお願いします。 #include <iostream> using namespace std; int main() { char inputchar; char outputchar; char Str1[12],Str2[12]; int chrcode; while(chrcode-120) { cin >> inputchar; chrcode = ( inputchar + inputchar ) / 2; if(chrcode >=65 && chrcode<=90) { outputchar=inputchar+'a'-'A'; strcpy(Str1,"大文字"); strcpy(Str2,"小文字"); } if(chrcode >=97 && chrcode<=122) { outputchar=inputchar-'a'+'A'; strcpy(Str1,"小文字"); strcpy(Str2,"大文字"); } cout << Str1 << "[" << inputchar << "]→" << Str2 << "[" << outputchar << "]" <<endl; } return 0; }

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

  • ベストアンサー
  • mooncake
  • ベストアンサー率100% (6/6)
回答No.3

> char inputchar; > (省略) > cin >> inputchar; cinは右辺に設定した値の型に勝手に変換してくれるので、 この場合変数inputcharがchar型なので一文字入力です。 inputcharには一文字しかセットされないです。 疑問に思われているのは、一文字入力のはずなのに aやbを押した時に即座に処理されなくて[Enter]を 押した時にまとめて処理されるのは何故か? と言う事では ないでしょうか? そうなら・・・ 文字入力は正確には、キーボード→バッファ→cin と いう順に送られます。要するに cin >> inputchar; では [バッファ]から一文字取り出します。 ところがプロンプトで文字を押しても即座にはバッファに 送られないんですよ。改行([Enter])を押すと初めて 「まとめて」送られます。cin >> inputchar; ではそこから 一文字を持ってきて以降の処理を行ない、次回のcinでは バッファに残っている文字があればキー入力待ちにならずに バッファから一文字持ってきて勝手に処理を続けます。 なので押した文字が即変換されるように作ったつもりでも、 一文字押す→処理→一文字押す→処理…とならずに、 一文字押す→一文字押す→一文字押す→… [Enter]を押す→ 処理→処理→処理→ … という動作になってしまいます。 ちなみに一文字押す毎に直ちに処理を行ないたいのなら、 #include <conio.h>を追加して、cin >> inputchar; の行を、 inputchar = getche(); に変えるとうまくいきますよ。 外していたらすみません。

noname#6117
質問者

補足

いいえ、外してないです。言いたいことを上手く解釈してくださってありがとうございます。 良く解かりました。ありがとうございました。 皆様、有難うございました。

その他の回答 (2)

  • ara_ara
  • ベストアンサー率35% (124/348)
回答No.2

>cin >> inputchar; これはコンソールから1文字読み込んで変数inputcharにセットするということですが... どうお答えすればいいのでしょうか? http://www.stat.phys.kyushu-u.ac.jp/~ryokawa/cbegin2_3/html4/cbegin_c1_s6.html >outputchar=inputchar+'a'-'A'; これは、大文字を小文字に変換 >outputchar=inputchar-'a'+'A'; こちらは小文字を大文字に変換 尚、下記の条件式は →以降のように書く方がベターです。 >if(chrcode >=65 && chrcode<=90) → if(chrcode >='A' && chrcode<='Z') >if(chrcode >=97 && chrcode<=122) → if(chrcode >='a' && chrcode<='z')

noname#6117
質問者

補足

参考URLありがとうございました。 また、ソースのご指摘ありがとうございました。 数値に直す必要がるのかと思っていましたので、 参考にさせていただきます。 以後、もう一度「'A'」の意味をどこかで理解していきたいと思います。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>// cin >> -- ; というのは、 //どういうことでしょうか? 通常はキーボードから入力された文字が、inputchar という変数に代入されます。 「コンソール入力(in)」という意味になります。 逆の機能が、cout (コンソール出力(out))です。 ">>" の向きが逆ですよね。 Cの場合、input や printf という物が使われます。

noname#6117
質問者

お礼

大変有難うございました。 私の説明不足で申し訳ありませんでした。 次回、また質問することがありましたら よろしくお願いします。

noname#6117
質問者

補足

回答ありがとうございます。 補足させていただきますと、 私は、このソースは、最初は、 一文字づつしか出来ないと思っていたのですが、 エラー試しで、「Hello World」と入れたら 一文字づつ認識しているので、???となってしまいましたので、質問させていただきました。 教科書は、例題で身につけるC++・P32で、 質問のソースはその変形です。

関連するQ&A