2011-05-23 67 views
3

我剛開始學習Objective-C。我正在做一個標準的計算器練習。它應該創建一個添加機器(例如,輸入操作員和編號,每次顯示結果)。但是我搞砸了一些東西,我認爲這與我使用「char」數據類型有關。循環和Objective-C中嵌套開關

下面的代碼,就在程序部分(接口和實現很簡單,在另一個版本的工作;還有,如果有人想看到他們,就問):

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

操作和值?

幫助和感謝。

P.S.我知道這個節目非常笨重。請憐憫一下,我學到的最後一種語言是Coleco Adam上的Basic,它有一個磁帶驅動器 - 是的,就像一個盒式磁帶,它非常棒。

+0

雖然可能不是你的問題,還有在「E」的情況下,沒有休息。你打算這麼做嗎? – Andy 2011-05-23 15:09:21

+0

注意,在這種情況下,它總是有幫助的檢查實際值是,無論是檢查它在調試器或打印出來(在這種情況下大概爲十六進制或十進制值)是什麼。 – 2011-05-23 16:09:21

+0

@安迪,啊,不。我的錯。那一個很好。 – ctaggart 2011-05-23 16:56:48

回答

4
scanf(" %c %lf", &operator, &value1); 

把一個空間開闊報價和%c之間,捕獲即標準輸入剩餘任何空白。

+1

爲了記錄,我用來調試的步驟如下:我運行了代碼,並注意到行爲與您所描述的相匹配。因爲它是在說「未知的操作符」,所以我使用NSLog(@「Operator'%c',operator)來記錄它找到了哪個操作符;'當我再次運行它時,我可以看到未知的操作符是回車,然後我搜索瞭如何讓scanf跳過回車,並發現一個空格字符可以做到這一點。 – 2011-05-25 07:52:44

0

operator主要是\n。您可能需要執行flushall()