C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

常用链接

留言簿(8)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

混合输入数字和面向行的字符串会导致问题。如下代码
#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;
}
程序运行情况如下图:


      当我输入完1966年,按回车后,根本没有输入地址的机会。问题在于,当cin读取年份时,将回车键生成的换行符留在了输入队列中。后面的cin.getline()看到换行符,将认为是一个空行,并将一个空字符串赋给address数组。解决之道是,在读取地址之前先读取并丢弃换行符。这可以通过几种方法来完成。其中包括使用没有参数的get()和使用接受一个char参数的get().
       cin>>year;
       cin.get();//or cin.get(ch);
      也可以利用表达式cin>>year返回cin对象,将调用拼接起来:
       (cin>>year).get();//or (cin>>year).get(ch);
posted on 2010-02-05 20:23 烟皑 阅读(903) 评论(0)  编辑 收藏 引用 所属分类: C++ primer plus学习笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理