我是C ++的新手,我正在尝试制作一个“计算器”:添加两个数字,减去两个数字,乘以两个数字,除以两个数字,取一个数字的正弦,取余数数字,或取一个数字的正切值。这是代码:
#include <iostream>;
#include <cmath>;
#include <string>
int main ()
{}
int ask(std::string operation);
{
std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
std::cin>>operation;
if (operation="Addition")
{
goto Add
}
float Add(float addend1, float addend2, float answer)
{
Add:
std::cout<<"Insert the first number to be added:\n";
std::cin>>addend1;
std::cout << "Insert the second number to be added:\n";
std::cin>>addend2;
answer=addend1+addend2;
std::cout<<addend1<<"+"<<addend2<<"="<<answer<<"\n";
break
}
}
稍后会有更多功能,但我的问题在第7行。有一个错误说明:在{{“令牌之前预期的unqualified-id。我知道我的缩进很糟糕,但谢谢!
答案 0 :(得分:8)
您的代码中存在很多问题。
首先,正如Ivan所指出的,您正在尝试在函数内部定义函数(ask()
内部main()
)。这是无效的。
其次,你有一个goto
(为什么?!)试图跳转到另一个函数的标签。我怀疑你的编译器是否会允许这样做,但是你希望它如何工作呢?您正在尝试使用传递给函数addition
的不存在的变量,因为您从未调用该函数,并且从未为其设置过堆栈。这很糟糕,不要这样做,只需正确调用该功能。
第三,#include
预处理程序指令以换行符结束,而不是分号。这可能会导致一些(相对)难以追踪编译错误。
第四,当您打算使用的是等于运算符const char*
时,您错误地尝试将"Addition"
operation
分配给==
。但这不会起作用,因为operation
是一个r值,不能像那样分配。如果你想修改它,你需要将它声明为一个指针,但再一次,这不是你在语义上的目的......
如果你想比较字符串和(无论出于何种原因......)意图使用指向char的指针,那么你应该使用strcmp。也就是说,你在C ++领域,所以只需使用std:string
。
尝试这样的事情。无论如何我还没有增强你的代码,只是做了一些可以编译和运行的代码。我做了一些改变。
除了摆脱一些语法错误之外,原始的Add
函数将结果作为float
参数。从函数中分配给它只会修改副本。如果希望调用者看到修改后的值,则需要使用指针或引用,但根本不需要,只需返回结果即可。
字符串比较区分大小写,因此您可能希望将其更改为不区分大小写。我假设没有本地化:)我也没有对输入执行错误检查,因此请注意,如果用户输入的内容不是有效的浮点数,则可能会失败。
#include <iostream>
#include <string>
using namespace std;
void Ask();
float Add( float, float );
int main( size_t argc, char* argv[] )
{
Ask();
return 0;
}
void Ask()
{
cout << "Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
string operation;
cin >> operation;
if( operation == "Addition" )
{
float first = 0, second = 0;
cout << "enter first operand";
cin >> first;
cout << "enter second operand";
cin >> second;
cout << "The result is: " << Add( first, second );
}
}
float Add( float first, float second )
{
return first + second;
}
答案 1 :(得分:6)
С++不允许嵌套函数。你有函数main()
并试图在其中声明函数ask()
。编译器不知道你想要什么。
答案 2 :(得分:2)
让我们试着打破这个...... 你不应该使用;在预编译器指令上。
#include <iostream>;
#include <cmath>;
#include <string>;
应该是
#include <iostream>
#include <cmath>
#include <string>
int main () {
int ask (){
请参阅Ivans answer了解
char operation [20];
std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
std:cin>>operation;
if (operation="Addition"){
您可以使用std::string而不是更容易处理。然后你可以写
#include <string>
...
std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
std::string myString;
getline(cin, myString);
if (myString == "Addition"){
goto Addition;
}
}
float addition(float addend1, float addend2, float answer)
{
不确定这里发生了什么..但是让我们打破它自己的功能
void Addition(){
// do addition here
}
Addition:
std::cout<<"Insert the first number to be added:\n";
std::cin>>addend1;
std::cout << "Insert the second number to be added:\n";
std::cin>>addend2;
answer=addend1+addend2;
std::cout<<addend1<<"+"<<addend2<<"="<<answer<<"\n";
}
不要忘记你必须定义变量
int addend1;
int addend2;
int answer;
希望这可以帮助你。
答案 3 :(得分:2)
首先是int ask()是什么。你为什么在这里开始一个块。 其次你有两个{s和三个},因为ask()。 我认为c ++不支持匿名函数。 第三个为什么你使用goto,当你有一个函数时,只需调用该函数。 Fourh你的加法函数应该是无效的或删除它的最后一个参数。 另外我认为你不需要string.h文件,除非你使用一些相当高级的函数,char数组应该足够你的程序。
答案 4 :(得分:2)
我稍微评论了你的代码,也许这会让你开始:
#include <iostream>;
#include <cmath>;
#include <string>;
int main () {
int ask (){ //you cannot nest functions in C++
char operation [20]; //why not use the string class if you include it anyway
std::cout<<"Type Addition, Subtraction, Multiplication, Division, Sine, Cosine, or Tangent:\n";
std:cin>>operation;
if (operation="Addition"){ //you cannot compare char-strings in C++ like that
goto Addition; //don't use goto (I don't want to say "ever", but goto is only used in extremely rare cases) make a function call instead
}
}
float addition(float addend1, float addend2, float answer) //you probably want to declare the variables inside the function
{
Addition: //don't use labels
std::cout<<"Insert the first number to be added:\n";
std::cin>>addend1;
std::cout << "Insert the second number to be added:\n";
std::cin>>addend2;
answer=addend1+addend2;
std::cout<<addend1<<"+"<<addend2<<"="<<answer<<"\n";
}