一、简述
今天在做练习题时注意到了之前所没有注意到的问题:
若给同样的 ch ,cout << ++ch; 与 cout << ch+1; 输出后的结果不一样。
浅思之后明白了,其实这个现象解释起来不难,细心一点就能够解释。
二、代码
#include<iostream>
using namespace std;
int main()
{
char ch;
cin.get(ch); //cin.get()读取缓冲区中第一个字符
//此时读取的字符不是 '.' 则进入循环,并继续输入
while (ch != '.')
{
if (ch == '\n') //若为换行符则输出 ch
cout << ch;
else //否则将 ++ch 输出
cout << ++ch;
cin.get(ch);
}
return 0;
}
输入 I love you, 回车后输出 J!mpwf!zpv-
再次输入 but I love my job even more. 回车后输出cvu!J!mpwf!nz!kpc!fwfo!npsf
细心的小伙伴发现了没有,输出的这些字符,其 ASCII 码值与我们输入字符的 ASCII 码值有什么关系?
当把cout << ++ch 换为 cout << ch + 1后,输出均变为数字
三、详解
1.++ch
递增运算符 ++,它作为前缀和后缀在某些语句中会有区别,这个理解起来也不难,但有人可能还是会糊涂,这里用一个小例子解释一下:
int x = 1;
int y = ++x;
cout << "x = " << x << ", " << "y = " << y << endl;
/* 最终得到 x = 2, y = 2 */
int z = 1;
int y = z++;
cout<<"z = "<<z<<", y = "<<y<<endl;
/* 最终得到 z = 2, y = 1 */
由此可见,++在前表示先加再赋值,在后表示先赋值再加。递减–也是同样的道理。
进入正题,++ch 是指将 ch 里面的字符的 ASCII 码 +1,再转换为 +1 后ASCII 码值所对应的字符,赋给 ch。所以说,通过语句 cout << ++ch;
输出的是一个字符。
2. ch + 1
ch + 1 是指将 ch 里面的字符的 ASCII 码 +1后直接输出。所以说,通过语句 cout << ch + 1;
输出的是一个数。