![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
//一文字入力のつもりで、作ったのですが、
//「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;
}
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(); に変えるとうまくいきますよ。
外していたらすみません。
この回答への補足
いいえ、外してないです。言いたいことを上手く解釈してくださってありがとうございます。
良く解かりました。ありがとうございました。
皆様、有難うございました。
No.2
- 回答日時:
>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'」の意味をどこかで理解していきたいと思います。
No.1
- 回答日時:
>// cin >> -- ; というのは、
//どういうことでしょうか?
通常はキーボードから入力された文字が、inputchar という変数に代入されます。
「コンソール入力(in)」という意味になります。
逆の機能が、cout (コンソール出力(out))です。
">>" の向きが逆ですよね。
Cの場合、input や printf という物が使われます。
この回答への補足
回答ありがとうございます。
補足させていただきますと、
私は、このソースは、最初は、
一文字づつしか出来ないと思っていたのですが、
エラー試しで、「Hello World」と入れたら
一文字づつ認識しているので、???となってしまいましたので、質問させていただきました。
教科書は、例題で身につけるC++・P32で、
質問のソースはその変形です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Google マップに同心円と文字を...
-
Excelが関数になってしまう
-
原稿用紙で「」の文が2行以上...
-
word
-
名古屋の栄と錦は治安悪い?
-
Illustratorテキストエリアへ塗...
-
『μg』の読み方と意味。
-
数式中の文字をCambria Math以...
-
PowerPoint SmartArtの箇条書...
-
イラレでダブルクリックで文字...
-
PDF→CSVへ変換
-
VBにて、非アクティブでフォー...
-
イラストレータをパワーポイン...
-
illustratorとExcelは連携出来...
-
VBA:水平スクロールバーが要ら...
-
DataGridViewでセル内の特定の...
-
googleサーチコンソールでの重...
-
VB.NET でのLaod/unLoad につ...
-
画像からテキストデータを正確...
-
VB.NETのテキストボック...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
{ CONTROL Forms.Label.1}が...
-
Google マップに同心円と文字を...
-
DelphiのRichEditで任意の行の...
-
C言語においてコマンドプロン...
-
excel 英数字の数字が一桁の時...
-
flashかfireworksで、丸に沿っ...
-
OS依存文字を一括で変換したい...
-
Excelが関数になってしまう
-
DOSの文字抽出
-
パソコンのA4に大きく一文字入...
-
webサイト制作やそのサイトをア...
-
他国語
-
Mathematicaでの複素数の絶対値...
-
データを圧縮したい
-
Split関数で文字を文割するのは...
-
隠した文字がわかりません…
-
HPの更新とは
-
【FLASH】 関数での足し算がで...
-
ExcelのセルでA1セルはUTF-8でA...
-
テキストファイルの表示
おすすめ情報