C++ Primer Plus P67——程序清单4.6( cin, cin.get(),cin.getline等等混合工具输入字符串和数字的问题)

C++ Primer Plus P67——程序清单4.2.5

cin, cin.get(),cin.getline等等混合工具输入字符串和数字的问题
本程序分为三个程序理解:

主程序(完整程序,包含错误程序和解决程序)

错误程序:修改程序将在(本程序上进行修改)——先理解错误程序

修改程序:解决错误程序的问题

主程序:

/*
 C++ Primer Plus P67——程序清单4.2.5

 cin, cin.get(),cin.getline等等混合工具输入字符串和数字的问题
*/

//错误程序(将在本程序上进行修改)——先理解错误程序

/*
#include<iostream>

int main(void)
{
	using namespace std;										//编译指令

	cout << "What year was your house built?" << endl;			//显示输入信息
	
	int year;	
	cin >> year;												//输入年份
	
	char address[80];											//定义数组用于存储地址名字
	cin.getline(address, 80);
	
	cout << "Year built: " << year << endl;						//输出年份
	cout << "Address: " << address << endl;						//输出地址

	return 0;
}
*/

/*
因为cin在读取完字符串后,结尾自动加上换行符,而第二次输入的时候,getline将从结束位置进行读取(此时结束位置为cin的换行符)
所以第二次输入的时候,getline认为改行是个空行,即输入一个空字符。
*/


//修改程序

#include<iostream>

int main(void)
{
    
    
	using namespace std;

	cout << "What year was your house built?" << endl;			//显示输入信息

	int year;
	(cin >> year).get();										//输入年份
	/*
	或者:
	cin >> year;
	cin.get();						或者(cin >> year).get(ch);
	*/ 

	cout << "What is its street address?" << endl;				//显示提升输入地址信息
	char address[80];											//定义数组用于存储地址名字
	cin.getline(address, 80);

	cout << "Year built: " << year << endl;						//输出年份
	cout << "Address: " << address << endl;						//输出地址

	return 0;
}
/*
解决方法就是通过增添将cin结束位置的换行符消除
*/

错误程序(先理解):

//错误程序(将在本程序上进行修改)——先理解错误程序

#include<iostream>

int main(void)
{
    
    
	using namespace std;										//编译指令

	cout << "What year was your house built?" << endl;			//显示输入信息
	
	int year;	
	cin >> year;												//输入年份
	
	char address[80];											//定义数组用于存储地址名字
	cin.getline(address, 80);
	
	cout << "Year built: " << year << endl;						//输出年份
	cout << "Address: " << address << endl;						//输出地址

	return 0;
}

错误程序结果:
在这里插入图片描述

错误程序的问题:因为cin在读取完字符串后,结尾自动加上换行符,而第二次输入的时候,getline将从结束位置进行读取(此时结束位置为cin的换行符)
所以第二次输入的时候,getline认为改行是个空行,即输入一个空字符。

修改程序:

#include<iostream>

int main(void)
{
    
    
	using namespace std;

	cout << "What year was your house built?" << endl;			//显示输入信息

	int year;
	(cin >> year).get();										//输入年份
	/*
	或者:
	cin >> year;
	cin.get();						或者(cin >> year).get(ch);
	*/ 

	cout << "What is its street address?" << endl;				//显示提升输入地址信息
	char address[80];											//定义数组用于存储地址名字
	cin.getline(address, 80);

	cout << "Year built: " << year << endl;						//输出年份
	cout << "Address: " << address << endl;						//输出地址

	return 0;
}

修改程序结果:
在这里插入图片描述

扫描二维码关注公众号,回复: 12888182 查看本文章

解决方法:就是通过增添将cin结束位置的换行符消除

具体查看书:C++ Primer Plus 第67—68页,4.2.5 混合输入字符串和数字

感谢观看

再次感谢~

猜你喜欢

转载自blog.csdn.net/qq_51212951/article/details/114874843
今日推荐