2015-05-08 72 views
0

如何在運行時通過用戶選擇在c中輸入多個整數輸入。 這裏輸入的第一行是測試用例的數量。然後我計算這種情況下輸入數字的總和。用戶在運行時動態輸入多個輸入

測試用例:

輸入

3 
1 6 7 
2 7 3 4 
2 1 

輸出:

14 
16 
3 

我們能否修改 scanf()的這種方式,因此它可以處理這個動態投入。

我不能將該行作爲字符串輸入,然後將它們拆分爲數字。

我們可以利用的空間,\ n既決定的數字,因爲我們做把字符串作爲輸入爲例:scanf("%[^\n]",&str);

+0

'的scanf( 「%d」,&NUM)'會做的伎倆。但是你知道每個測試用例中會輸入多少個數字嗎?或者是隨機的? –

+0

不,我看到@LPs – Subinoy

+1

*「我不能將該行作爲字符串輸入,然後將它們拆分爲數字。」* - 爲什麼不允許明顯的解決方案? –

回答

0

答案被BLUEPIXY被他漂亮的代碼提供。在這裏,我們將考慮輸入作爲一對。

它既可以是一對數字和空格,也可以是一對數字和換行符。

實施例:2 3 4

因此,在這個輸入我們採取如對,像 - '2 ', '3 ' 和 '4 \n'。 當我們遇到\n時,我們停止無限循環。下面的代碼有云:

#include <stdio.h> 

int main(void){ 
    int n; 

    scanf("%d", &n); 
    while(n--){ 
     int v, sum = 0; 
     while(1){ 
      char ch = 0; 
      scanf("%d%c", &v, &ch); 
      sum += v; 
      if(ch == '\n' || ch == 0) 
       break; 
     } 
     printf("%d\n", sum); 
    } 

    return 0; 
} 

輸入:

3 
1 6 7 
2 7 3 4 
2 1 

輸出:

14 
16 
3 
+0

這種方法的小孔是它依賴於1)'\ n'後面的數字和2)行至少有1個數字3)輸入文本總是數字。 – chux

+0

@chux是的,你說得對,輸入文本總是需要數字。 – Subinoy