为什么模运算符给出错误的答案?
Why is the modulus operator giving wrong answer?
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
stringstream ss;
ss << 32;
string str = ss.str();
cout << str << endl
<< str[0] << endl
<< str[1] <<endl
<< str[0]%10;
return 0;
}
输出为:
32
3
2
1
相反,最后一行应该是 3,因为 3%10=3。
因为您正在将它与 ascii 值进行比较,即 51(0 是 48),修改后得到 1。您应该减去“0”或 48 以获得汽车的真实数字。
字符的表示与数字的表示不同。即使 str[0]
处的字符是 3,它也是字符 3,其 ASCII 码(即它的数字表示)是 51。由于在执行需要整数的操作时字符可以隐式转换为整数,因此您的代码正在执行 51%10
即 1.
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
stringstream ss;
ss << 32;
string str = ss.str();
cout << str << endl
<< str[0] << endl
<< str[1] <<endl
<< str[0]%10;
return 0;
}
输出为:
32
3
2
1
相反,最后一行应该是 3,因为 3%10=3。
因为您正在将它与 ascii 值进行比较,即 51(0 是 48),修改后得到 1。您应该减去“0”或 48 以获得汽车的真实数字。
字符的表示与数字的表示不同。即使 str[0]
处的字符是 3,它也是字符 3,其 ASCII 码(即它的数字表示)是 51。由于在执行需要整数的操作时字符可以隐式转换为整数,因此您的代码正在执行 51%10
即 1.