2012-03-22 41 views
0

私は以下を試みましたが、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

なぜ条件文を使用できないのですか?この宿題ですか? –

+0

ブール値を出力したい場合は、なぜブール値を使用しないのですか? –

答えて

1

islowerは、文字が小文字でない場合は0を返します。

0のみがfalseであることに注意してください。関数が-1を返しても、依然としてtrueの値です。

hereを参照してください。

EDIT:

あなたはinput = 1 && islower(input);を使用して試すことができます。これは、あなたが整数変数にislower(input)の出力を保存することができます。1.

+1

私の悪いです。私は頭の中で '&&'と '||'を逆に回っています。私も周りをチェックしたが、論理式(intへのキャスト)が0/1になるとは思わなかったが、私は間違っていた。あなたのコードは信頼できます。編集されたので、-1を取り除くことができます。 –

+0

心配する必要はありません。それは起こる:)。コメントを削除しました。 –

+0

実際、それはまだ "バグ"です。短絡回路 "&&"はブール値を返します。 "true" * STILL *は必ずしも "0x01"である必要はありません。あなたはビット単位の "&":input = islower(入力)& 1;を使用する必要があります。 – paulsm4

1

代わりcharintを使用します。islowerはは唯一の "0" または "0ではない何か" を返すことが保証されていることを

int result = islower(input); 
cout << result; 

注意を。 cout << (result ? 1 : 0)と書いて修正することはできますが、要件によっては許可されていないかどうかはわかりません。

+0

char型はintにautocastですので、これは問題ではないと思います。 –

+1

オートキャスト?これは正解ですが、彼は全体像を教えていません。 –

+2

実際には、coutはcharを "char"としてレンダリングします。意味 "0"は、印刷不可能なバイナリコードである可能性があります。たとえば、これはMSVCで表示される方法です。入力A文字: a 入力:a、bIsLower:☻ – paulsm4

0

0以外のすべての値はtrueです。 0 == false。

+0

Davita - 私はあなたの脳を傷つけたトロルを知りませんが、あなたはまったく正しいです: – paulsm4

+0

@ paulsm4ありがとう、あなたのために同じ:-) – Davita

0

になるためにあなたにtrue値を強制valueを言うと、cout << value

int value = islower(input); 
cout << input; 
1

はいずれも0と1が理由です、非印字可能文字であるでしょう出力が表示されません。出力をファイルにリダイレクトし、16進エディタで開くと結果が表示されます。

ストアブールでの結果、または結果をキャスト:cout << (bool) input;

+0

または単に出力可能な値を出力してください。 'cout <<( '0' + input)' –

+0

'std :: cout <<(int)input;'が好きです。ゆっくりだが安全だ –

+0

うわー!ありがとうKarolyあなたの答えは有用だった私は> cout <<(bool)の入力を試みた;それが働いた –

0
#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

5

0または1のいずれかを取得するには、あなたは二重の!操作を使用することができますブール値を正規化するためのイディオム。値が0である場合、値が0で、値が1の場合、0となります。

一部の人々は、二重否定を好きではない、とあなたは!=等価演算子と同じ結果を得ることができます。

cout << (input != 0); 
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. 
関連する問題