淘先锋技术网

首页 1 2 3 4 5 6 7

instream 的 cin

cin使用的时候出现的问题

cin 等待用户输入的时候会使用空白(空格、制表符、和换行符)来确认字符串的结束位置。
如:输入一个Alan Dreeb,那么遇到空格了,Alan被赋值给第一个变量,Dreeb被赋值给第二个变量。

int main()
{
	char name[20];
	char favorite[20];
	cout << "enter your name:\n";
	cin >> name;
	cout >> "enter your favorite:\n";
	cin >> favorite;
	cout << "name: "<< name << endl ;
	cout << "favorite: "<< favorite;
}

	输出结果:
	enter your name :
	Alan Yao
	enter your favorite :
	name : Alan 
	favorite: Yao

只给你输入一个name,原因,首先Alan Yao,当cin读取到空格,认为已经结束了,所以在Alan后面添加\0。当程序运行到 cin >> favorite,程序读取到Yao,所有把Yao\0赋值给favorite。

使用cin.getline()

cin.getline()是面向行输入的,它使用的是通过回车键输入的换行符来确认结尾。里面有两个参数,第一个是要处理的变量,第二个是要读取的字符数(记住有一个空字符)。其中它是不保存换行符的,还有旧的库对这个函数支持不太友好。

int main()
{
	char name[20];
	char favorite[20];
	cout << "enter your name:\n";
	cin.getline(name,20);
	cout >> "enter your favorite:\n";
	cin.getline(favorite,20);
	cout << "name: "<< name << endl ;
	cout << "favorite: "<< favorite;
}

	输出结果:
	enter your name :
	Alan Yao
	enter your favorite :
	sport
	name : Alan Yao
	favorite: sport

使用cin.get()

为了更加好支持旧版本的c++,还有看出用户输入的是什么,检查错误更加容易一些。使用cin.get()可以更加清晰。它不再读取和丢弃换行符。参数和cin.getline()类似。

`cin.getline(name,20)==cin.get(name,20).get()`