2015-07-21 295 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

这将不仅允许任何合理长度的表达式,而且还可以正确处理任意嵌套的带括号的子表达式,评估特殊函数和自定义运算符。