私は次のコードを使って簡単な電卓を作っていました。今は完全に実行されます。しかし、私は物事を変えようとしたときにうまくいかない。私はBOOL program
を使って人からの入力を求め続けるか、プログラムを終了するかを確認しました。宣言されているが未設定の変数はtrueと評価されますか?
私はちょうど(program)
にwhile
文の表現を変更し、program
文でYES
/NO
を変更した場合は、理由コードはwhile
内にある何に失敗するのか?
// A simple printing calculator
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]
Calculator *deskCalc = [[Calculator alloc] init];
double value1;
char operator
BOOL program;
[deskCalc setAccumulator: 0];
while (!program) {
NSLog (@"Please type in your expression");
scanf (" %lf %c", &value1, &operator);
program = NO;
if (operator == '+') {
[deskCalc add: value1];
}
else if (operator == '-') {
[deskCalc subtract: value1];
}
else if (operator == '*' || operator == 'x') {
[deskCalc multiply: value1];
}
else if (operator == '/') {
if (value1 == 0)
NSLog (@"Division by zero!");
else
[deskCalc divide: value1];
}
else if (operator == 'S') {
[deskCalc set: value1];
}
else if (operator == 'E') {
[deskCalc accumulator];
program = YES;
}
else {
NSLog (@"Unknown operator");
}
}
NSLog (@"The result is %f", [deskCalc accumulator]);
[deskCalc release];
[pool drain];
return 0;
}
常にガベージ(非ゼロ)の場合は、99.99%の時間がTrue(0のみがfalseとみなされるため)と評価されると想定するのは安全でしょうか? – 5StringRyan
絶対にありません。その値は未定義です。それは毎回ランダムな値に評価される可能性があります。親指のルール:***常にCであなたの変数を初期化*** –
(私は自分のコードでそうであるように)私は完全に初期化時にあなたに同意します。私は、「未定義」の値が常にランダムで、無作為に何回0が選ばれるかについて考えていました。 0以外のもの(初期化なしでbool変数にランダムに割り当てられる可能性があります)は、評価中に「FALSE」を返しますか? – 5StringRyan