2013-02-05 26 views
-1

我正在學習C語言,目前正在通過命令行程序工作。我有興趣編寫一個程序,它會將n條款添加到彼此,就像普通的計算器一樣。數字n將由用戶輸入的術語的數量定義(與用戶在操作之前明確輸入的用戶指定的n相對)。如何才能做到這一點?我應該使用while循環嗎?到目前爲止,我試着簡單地定義用戶可以輸入的有限數量的術語(最多10個術語,如果它更少,只需用零替換剩餘術語)。在C中添加n個數字

scanf("%f%c%f%cf%cf%cf%cf%cf%cf%cf%cf", &num1, &op, &num2, &op, &num3, &op, &num4, &op, &num5, &op, &num6, &op, &num7, &op, &num8, &op, &num9, &op, &num10); 

    // addition 
    if (strcmp(&menuchoice, "a") == 0) 
     { 
      num3 = num1+num2+num3+num4+num5+num6+num7+num8+num9+num10; 
      return num3; 
     } 
+2

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Crozin

+0

一個'while'循環是一種選擇;如果你正在處理程序的參數(你知道那裏有多少個參數,或者有一個標記值 - 一個空指針 - 在列表的末尾),'for'循環也是完全可行的。 –

+0

您需要捕獲成功輸入的條目數,這是scanf()的返回值。但是,'scanf()'將一直等到它無法獲得更多的數據,或者它會得到一個無效的數據項。所以,你需要做一些工作,比如用'fgets()'讀行並用'sscanf()'掃描行。您可能需要格式字符串中的某些空格來處理數字和運算符之間的可選空格。如果你捕捉操作符,你不需要菜單選項'a'(儘管你需要提供'op1','op2',...)。 –

回答

3

如果你想顯示總和已經進入ň號碼後,才,你必須有一個辦法,找出所有的號碼已經被輸入。一種方法是獲得用戶可以輸入的哨點值。這可能是空行或像=這樣的字符串。如果您只添加正數,則可以使用負數0來表示數字已全部輸入。

while (1) 
{ 
    /* get input */ 
    if (/* should exit */) 
     break; 
    sum += input; 
} 
/* show sum */ 

如果你試圖模仿一個計算器,你可以簡單地顯示正在運行的總每個數字輸入後。這樣你就不知道有多大n是。

while (1) 
{ 
    /* get input */ 
    sum += input; 
    /* show sum */ 
} 
+0

在第二個例子中,如何讀取輸入?它會像'scanf(「%f%c」,&input)'? – Jules

+1

如果你打算使用'「%f%c」',你需要傳遞'%c'的東西來進入。 – Gabe