私は以下を試みましたが、0または1を得ていません。問題は、このプログラムが条件文を使用せずにブール値0または1をプリントアウトするようにする方法ですC++で。入力に応じてブール値0または1を出力する関数lowerlower
char input;
char output;
cout << "Input A Character: \n";
cin >> input;
input = islower(input);
cout << input;
私は以下を試みましたが、0または1を得ていません。問題は、このプログラムが条件文を使用せずにブール値0または1をプリントアウトするようにする方法ですC++で。入力に応じてブール値0または1を出力する関数lowerlower
char input;
char output;
cout << "Input A Character: \n";
cin >> input;
input = islower(input);
cout << input;
islower
は、文字が小文字でない場合は0を返します。
0のみがfalse
であることに注意してください。関数が-1を返しても、依然としてtrue
の値です。
hereを参照してください。
EDIT:
あなたはinput = 1 && islower(input);
を使用して試すことができます。これは、あなたが整数変数にislower(input)
の出力を保存することができます。1.
私の悪いです。私は頭の中で '&&'と '||'を逆に回っています。私も周りをチェックしたが、論理式(intへのキャスト)が0/1になるとは思わなかったが、私は間違っていた。あなたのコードは信頼できます。編集されたので、-1を取り除くことができます。 –
心配する必要はありません。それは起こる:)。コメントを削除しました。 –
実際、それはまだ "バグ"です。短絡回路 "&&"はブール値を返します。 "true" * STILL *は必ずしも "0x01"である必要はありません。あなたはビット単位の "&":input = islower(入力)& 1;を使用する必要があります。 – paulsm4
代わりchar
のint
を使用します。islowerはは唯一の "0" または "0ではない何か" を返すことが保証されていることを
int result = islower(input);
cout << result;
注意を。 cout << (result ? 1 : 0)
と書いて修正することはできますが、要件によっては許可されていないかどうかはわかりません。
char型はintにautocastですので、これは問題ではないと思います。 –
オートキャスト?これは正解ですが、彼は全体像を教えていません。 –
実際には、coutはcharを "char"としてレンダリングします。意味 "0"は、印刷不可能なバイナリコードである可能性があります。たとえば、これはMSVCで表示される方法です。入力A文字: a 入力:a、bIsLower:☻ – paulsm4
になるためにあなたにtrue
値を強制value
を言うと、cout << value
int value = islower(input);
cout << input;
はいずれも0と1が理由です、非印字可能文字であるでしょう出力が表示されません。出力をファイルにリダイレクトし、16進エディタで開くと結果が表示されます。
ストアブールでの結果、または結果をキャスト:cout << (bool) input;
または単に出力可能な値を出力してください。 'cout <<( '0' + input)' –
'std :: cout <<(int)input;'が好きです。ゆっくりだが安全だ –
うわー!ありがとうKarolyあなたの答えは有用だった私は> cout <<(bool)の入力を試みた;それが働いた –
#include <iostream>
using namespace std;
int
main()
{
char input;
cout << "Input A Character: \n";
cin >> input;
unsigned int bIsLower = islower(input);
cout << "input: " << input << ", bIsLower: " << bIsLower << endl;
return 0;
}
入力文字:
入力:、bIsLower:2入力文字:
入力:A、bIsLower:0入力文字:
Z
入力:Z、bIsLower:cout << !!input;
!!
が一般的です:2
0
または1
のいずれかを取得するには、あなたは二重の!
操作を使用することができますブール値を正規化するためのイディオム。値が0
である場合、値が0
で、値が1
の場合、0
となります。
一部の人々は、二重否定を好きではない、とあなたは!=
等価演算子と同じ結果を得ることができます。
cout << (input != 0);
タイプブールの変数を使用するブール値を印刷します。
char input;
bool output;
// ^^^^
cout << "Input A Character: \n";
cin >> input;
output = islower(input);
// ^^^^^^ Store result in a bool variable (otherwise why have output)
cout << output;
// ^^^^^^^ Now print it.
なぜ条件文を使用できないのですか?この宿題ですか? –
ブール値を出力したい場合は、なぜブール値を使用しないのですか? –