2016-10-11 17 views
0

我在使用scanf時遇到了問題(在任何人提到它之前,我必須使用它,我不能使用getchar(),fgets()和其他各種各樣的東西)。在我的代碼下面,我需要添加(或減去)兩個實數或整數,並將總和存儲到內存中。我認爲我可以自己梳理記憶的東西,但問題在於打印總和的結果。嘗試在循環中掃描scanf值。需要輔助輸入來打印第一個輸入

我必須輸入'6 + 6',按回車鍵,然後輸入另一個字符以顯示原始總和。此外,如果我輸入'6 + 6 +',我希望它的程序行爲。

我想我已經犯了一個非常基本的錯誤。我很累。

#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
    char memoryExitSwitch[256]; 
    int q =1; 
    double operandOneHalf; 
    double operandTwo; 
    double result = 0.0; 

    while(q == 1){ 
    scanf("%lf" "%lf ", &operandOneHalf, &operandTwo); 
    scanf(" %s", memoryExitSwitch); 

    switch (memoryExitSwitch[0]) { 
     case 'p': 
     result = memoryExitSwitch[1] + operandTwo; 
     printf("ANS1= %lf\n", result); 
     memoryExitSwitch[1] = result; 
     break; 

     case 'q': 
     q = 0; 
     break; 

     default: 
     result = operandOneHalf + operandTwo; 
     printf("ANS2= %lf\n", result); 
     memoryExitSwitch[1] = result; 
     break; 
    }//switch 

    }//main while loop q 
    return 0; 
} 
+0

你試過switch語句之前打印出來'memoryExitSwitch'? – bruceg

+2

你在第一個'svanf()'的格式字符串中有一個尾隨空格;這是一個主要問題。它不會停止,直到您鍵入一個非空白。 –

回答

1

你的程序等待,因爲第二%lf這裏後的尾部空間的第二號後非空白字符,:

scanf("%lf" "%lf ", &operandOneHalf, &operandTwo); 

..和如果你解決這個問題,它會仍然等待非空白字符串是兩個數字輸入後,因爲下面調用scanf()的:

scanf(" %s", memoryExitSwitch); 
+1

不是那個;這是另一個麻煩。 –

+0

「你的程序等待一個非空白字符串」 - >'scanf(「%s」,memoryExitSwitch);'和scanf(「%s」,memoryExitSwitch)具有相同的效果;' – chux

+0

@JonathanLeffler:*他們兩個都是麻煩的。如果'%lf'後面的空格是固定的,那麼下面的'scanf()'仍然會等待一個字符串滿足'%s'。 – caf

2

各種問題

  1. 結尾間隔"%lf "迫使scanf()檢測以下的號碼後非空格,延緩scanf()回報。 @Jonathan Leffler" "說要消耗所有可選的以下空格。 scanf()需要看到一些非空白區域才知道它已經看到了下面所有的空白區域。

    // scanf("%lf" "%lf ", &operandOneHalf, &operandTwo); 
    //     v--- no space 
    if (scanf("%lf" "%lf", &operandOneHalf, &operandTwo) != 2) return -1; 
    
  2. 好碼限制了輸入寬度,以防止緩衝區溢出

    char memoryExitSwitch[256]; 
    // scanf(" %s", memoryExitSwitch); 
    //   v ---- space not needed 
    //   |255 - lit input to 1 less than buffer size 
    //   | |       v--- Check result 
    if (scanf("%255s", memoryExitSwitch) != 1) return -1; 
    
相關問題