電子書籍の厳選無料作品が豊富!

//一文字入力のつもりで、作ったのですが、
//「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;
}

A 回答 (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(); に変えるとうまくいきますよ。

外していたらすみません。

この回答への補足

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

皆様、有難うございました。

補足日時:2004/02/22 02:10
    • good
    • 0

>cin >> inputchar;


これはコンソールから1文字読み込んで変数inputcharにセットするということですが...
どうお答えすればいいのでしょうか?
http://www.stat.phys.kyushu-u.ac.jp/~ryokawa/cbe …

>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')

この回答への補足

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

補足日時:2004/02/22 02:03
    • good
    • 0

>// cin >> -- ; というのは、


//どういうことでしょうか?

通常はキーボードから入力された文字が、inputchar という変数に代入されます。
「コンソール入力(in)」という意味になります。

逆の機能が、cout (コンソール出力(out))です。
">>" の向きが逆ですよね。

Cの場合、input や printf という物が使われます。

この回答への補足

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

補足させていただきますと、

私は、このソースは、最初は、
一文字づつしか出来ないと思っていたのですが、
エラー試しで、「Hello World」と入れたら
一文字づつ認識しているので、???となってしまいましたので、質問させていただきました。

教科書は、例題で身につけるC++・P32で、
質問のソースはその変形です。

補足日時:2004/02/21 20:57
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/02/22 02:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!