2015-07-21 288 views
-2

嗨,我是初學者的C++語言,我想知道是否有任何方式編寫無限輸入的程序。例如:我想寫一個計算器程序來添加數字。這很容易,但有一種方法可以讓用戶可以添加儘可能多的數字,而不需要詢問他想要的數字。這樣,如果他想添加三個數字,他只需鍵入「1 + 1 + 1」,或者如果他想添加四個數字,他會在前一行的末尾添加「+1」。與此類似,用戶不會被卡住固定數量的輸入或不需要詢問他需要多少輸入。我需要知道哪些C++函數才能做到這一點無限輸入的C++計算器

+1

這聽起來像你需要循環 – yizzlez

+0

我將如何使用循環來做到這一點? –

+1

要完全解決這個問題,您需要編寫一個簡單的解析器。您可能需要查看有時用於計算器的Reverse Polish Notation,因爲它比標準符號更容易解析。 – mattnewport

回答

0

是的。有可能的。您可以使用vectorint s。獲取用戶輸入並計算vector中元素的總和。把它放在循環中,這就是你想要的。

+0

Works,but double工作量。一個循環用於加載矢量,然後用另一個循環來處理矢量。如果您需要存儲輸入,並考慮操作的順序,例如@defube對堆棧和隊列的建議就更好了。 – user4581301

0

試試這個:

#include <iostream> 

int main (int argc, char *argv[]) 
{ 
    for (int i = 0; i < argc; i++) 
     std::cout << "argument " << i << " is " << argv[i] << std::endl; 
    return 0; 
} 
+0

迴避OP請求的一部分*而不被問及他想要多少個數字* – user4581301

4

您可以使用while循環從標準輸入讀取。 (標準:: CIN)的一些基本代碼從一個while循環讀取,並添加輸入到總和如下:

#include <iostream> 
#include <string> 
#include <cstdlib> 

int main(){ 
    std::string line = ""; 
    double sum = 0.0; 
    while(line != "end"){ 
     std::cout<<"The current sum is: "<<sum<<std::endl; 
     std::cout<<"Enter the number you would like to add or \"end\" to exit: "; 
     std::cin>>line; 
     sum += atof(line.c_str()); 
    } 
    std::cout<<"The final sum is: "<<sum<<std::endl; 
} 

直到它接收到輸入「結束」這將讀取的數字。

+0

目前爲止的最佳代碼響應。一個警告:'atof'在遇到壞串時悄然退出。 ['strtod'](http://en.cppreference.com/w/cpp/string/byte/strtof)允許程序通過測試字符串結尾NULL的'end'參數來捕獲大多數錯誤。 – user4581301

+1

@ user4581301確實如此,但由於OP聲稱他們是初學者,我不想將它們與額外的錯誤檢查代碼混淆。初學者通常更容易理解「提供正確的輸入」,而不是「驗證正確的輸入」。 –

+0

同意。一步一步來。獲取數據。測試它。獲取*正確的*數據。測試它。操作數據。測試它。我只想稍後留下一些麪包屑。 – user4581301

2

對於包含中綴運算符的表達式的解析和評估,很少有東西比Shunting Yard Algorithm簡單。

在C++實現,這比與容器庫的任何其它語言幾乎沒有不同(或內置的支持),其提供stack S和queue秒。在這裏,您需要使用std::stackstd::queue。程序的輸入可以是從std::cin(標準輸入或控制檯)讀取的單行(包含用戶輸入的表達式)到std::string

這將不僅允許任何合理長度的表達式,而且還可以正確處理任意嵌套的帶括號的子表達式,評估特殊函數和自定義運算符。