混合輸入數(shù)字和面向行的字符串會導(dǎo)致問題。如下代碼
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])


{
cout<<"What year was your house built?\n";
int year;
cin>>year;
cout<<"What is its street address?\n";
char address[80];
cin.getline(address,80);
cout<<"Year built: "<<year<<endl;
cout<<"Address: "<<address<<endl;
cout<<"Done!\n";
return 0;
}
程序運行情況如下圖:

當(dāng)我輸入完1966年,按回車后,根本沒有輸入地址的機會。問題在于,當(dāng)cin讀取年份時,將回車鍵生成的換行符留在了輸入隊列中。后面的cin.getline()看到換行符,將認(rèn)為是一個空行,并將一個空字符串賦給address數(shù)組。解決之道是,在讀取地址之前先讀取并丟棄換行符。這可以通過幾種方法來完成。其中包括使用沒有參數(shù)的get()和使用接受一個char參數(shù)的get().
cin>>year;
cin.get();//or cin.get(ch);
也可以利用表達式cin>>year返回cin對象,將調(diào)用拼接起來:
(cin>>year).get();//or (cin>>year).get(ch);



















當(dāng)我輸入完1966年,按回車后,根本沒有輸入地址的機會。問題在于,當(dāng)cin讀取年份時,將回車鍵生成的換行符留在了輸入隊列中。后面的cin.getline()看到換行符,將認(rèn)為是一個空行,并將一個空字符串賦給address數(shù)組。解決之道是,在讀取地址之前先讀取并丟棄換行符。這可以通過幾種方法來完成。其中包括使用沒有參數(shù)的get()和使用接受一個char參數(shù)的get().
cin>>year;
cin.get();//or cin.get(ch);
也可以利用表達式cin>>year返回cin對象,將調(diào)用拼接起來:
(cin>>year).get();//or (cin>>year).get(ch);