如何解决在Objective-C中使用嵌套开关的While循环
| 我刚刚开始学习Objective-C。我正在执行标准的计算器练习之一。应该创建一个加法器(例如,输入操作员和号码,每次显示结果)。但是我弄乱了一些东西,我认为这与我使用\“ char \”数据类型有关。 这是代码,仅是程序部分(接口和实现很简单,并且可以在另一个版本中使用;但是,如果有人希望看到它们,只需询问):int main (int argc,const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
double value1 = 0.0;
char operator = \'a\';
Calculator *deskCalc = [[Calculator alloc] init];
NSLog(@\"Initial value?\");
scanf(\"%lf\",&value1);
[deskCalc setAccumulator: value1];
while (operator != \'e\') {
{
NSLog(@\"Operation and value?\");
scanf(\"%c %lf\",&operator,&value1);
}
switch (operator){
case \'+\':
[deskCalc add: value1];
NSLog(@\"%f\",[deskCalc accumulator]);
break;
case \'-\':
[deskCalc subtract: value1];
NSLog(@\"%f\",[deskCalc accumulator]);
break;
case \'*\':
case \'x\':
[deskCalc multiply: value1];
NSLog(@\"%f\",[deskCalc accumulator]);
break;
case \'/\':
if (value1 != 0) {
[deskCalc divide: value1];
NSLog(@\"%f\",[deskCalc accumulator]);
}
else {
NSLog(@\"Division by zero not allowed.\");
NSLog(@\"%f\",[deskCalc accumulator]);
}
break;
case \'s\':
[deskCalc setAccumulator: value1];
NSLog(@\"%f\",[deskCalc accumulator]);
break;
case \'e\':
NSLog(@\"Done,sucker,final answer: %f.\",value1);
default:
NSLog(@\"Unknown operator.\");
NSLog(@\"%f\",[deskCalc accumulator]);
break;
}
}
[deskCalc release];
[pool drain];
return 0;
}
并且,如果有帮助,这是运行此命令时从终端获得的信息:
从终端:
初始值?
12 //我的输入
操作和价值?
x 4 //我的输入
未知运算符。
操作和价值? //不停地要求输入。
48.000000
操作和价值?
帮助和感谢。
附言我知道程序很笨拙。求求你了,我最后学到的语言是我的Coleco Adam上的Basic语言,它有一个磁带驱动器-是的,就像盒式磁带一样,真棒。
解决方法
scanf(\" %c %lf\",&operator,&value1);
在引号和ѭ2之间放置一个空格,以捕获stdin上剩余的任何空格。
,operator
主要是\\n
。您可能需要做flushall()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。