cin单字符输入细节处理

cin.get(ch)函数可以从输入流里面读取任意字符(包括空字符,换行符,制表符等),它等效下面的操作。 

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() 
{
	char ch;
	cin.get(ch);
	cout << ch << endl;
	cin >> noskipws;
	cin >> ch >>skipws;
	system("pause");
	return 0;
}

cout.put(ch)和cin.get(ch)是一对相反操作。

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() 
{
	char ch;
	cin.get(ch);
	//cout << ch << endl;
	cout.put(ch);
	system("pause");
	return 0;
}

cin.get()和上面带参的有一定区别,它返回的是unsigned int 类型,也就是字符的ascil值。它这么处理最主要是想,返回一个真实字母,因为有些字符无法返回,例如文件尾字符。

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() 
{
	char ch;
	ch = cin.get();
	cout.put(ch);
	system("pause");
	return 0;
}

cin.putback(ch),将字符ch放入流里面。

如我输入ab

第一个put会输出a,然后cin.putback(ch)将a放进流里面,此刻的流仍然为ab第二次读取仍然为a。

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() 
{
	char ch;
	ch = cin.get();
	cout.put(ch);
	cin.putback(ch);
	cin.get(ch);
	cout.put(ch);
	system("pause");
	return 0;
}

cin.unget(),回退到最近一个读取过的字符位置,注意别和cin.putback(ch)连用不然产生意想不到状况,博主认为,这个是破坏了流读取记录。导致有问题。

先给个正常例子:设输入为a,先读取a,再用unget进行回退,ch1读取上一个字符,也就是a。

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() 
{
	char ch;
	char ch1;
	ch = cin.get();
	cout.put(ch);
	cin.unget();
	cin.get(ch1);
	cout.put(ch1);
	system("pause");
	return 0;
}

错用例子:

无论你输入多么长一段,只会返回第一个字符,不大了解的慎用!!!!!!

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main() 
{
	char ch;
	char ch1;
	ch = cin.get();
	cout.put(ch);
	cin.putback(ch);
	cin.unget();
	cin.get(ch1);
	cout.put(ch1);
	system("pause");
	return 0;
}

cin.peek();虽然读取该字符,但是不从流里面删除它!!

和cin.get(ch),再使用cin.putback(ch)等效,关键是它可以和cin.unget()连用。

我就不举例了!

猜你喜欢

转载自blog.csdn.net/qq_41657315/article/details/81114743