请告诉我为什么这个c ++代码不起作用,当我输入2 + 4这样的等式时,我得到输出...为什么会发生这种情况?:
#include <iostream>
using namespace std;
int main()
{
string input;
int length;
int p1;
int i1;
int i2;
string result;
cout << "Enter your expression" << endl;
cin >> input;
length = input.size();
char data[length];
input.copy( data, length );
switch (data[1]){
case '+' :
p1 = length - 2;
i1 = data[0];
i2 = data[p1];
result = i1 + i2;
cout << result << endl;
break;
}
return 0;
}
答案 0 :(得分:0)
这里有三件让你困惑的事情。
首先是表达式:
i1 = data[0];
i2 = data[p1];
指定data[0]
和data[p1]
的字符值
如果输入为2+4
,您实际上正在分配&#39; 2&#39;的字符值。和&#39; +&#39;。在ASCII&#34; 2&#34;由代码点50和&#34; +&#34;表示。到了43。
那么表达式i1+i2
实际上等于93。
令你感到困惑的是,s=i1+i2
实际上绑定了重载basic_string& operator=( CharT ch );
,因此将93转换回字符并将单个字符串分配给s
,其恰好是]
1}}如你所见!
这是修复了这三个故障的代码:
#include <iostream>
using namespace std;
int main()
{
string input;
int length;
int p1;
int i1;
int i2;
string result;
cout << "Enter your expression" << endl;
cin >> input;
length = input.size();
char data[length];
input.copy( data, length );
switch(data[1]){
case '+' : p1 = length - 1; //Not -2 as was.
i1 = data[0]-'0';//Works for ASCII compatible and so all modern systems...
i2 = data[p1]-'0';
result = std::to_string(i1 + i2);//Force the creation of a decimal string of the result.
cout << result << endl;
break;
}
return 0;
}