我正在使用以下代码做一个简单的计算器。现在它完美地执行。然而,当我试图改变一切时,它不起作用。我使用BOOL program
检查是否继续要求此人输入或完成程序。
如果我将while
语句的表达式更改为(program)
并更改YES
语句中的NO
/ program
,为什么代码无效做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;
}
答案 0 :(得分:7)
您尚未设置program
的初始值,因此默认为垃圾值发生为非零。
声明时设置program
的初始值:
BOOL program = NO; // or YES, whichever is appropriate
答案 1 :(得分:2)
在声明它们时初始化所有变量始终是一个好习惯。
同样使用scanf输入可能会过度,如果我是你,我会使用fgets,然后使用strtok从字符串中提取信息。这样,即使用户将肘部放在键盘上,您也不必担心。或者,如果您喜欢scanf,请在该字符串上使用sscanf而不是strtok。