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 混合输入字符串和数字
感谢观看
再次感谢~