CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

I/O缓冲区问题(郁闷了我很久,求高人指点。)

楼主w_zforever(舞动的枫叶)2005-05-07 23:45:44 在 C/C++ / C++ 语言 提问

#include     <iostream.h>      
     
  int     main(int     argc,     char*     argv[])      
  {      
                        char     s[10];      
     
                        cin.get(s,10);//第1次输入      
     
                        cout<<s<<endl;      
     
                        cin.get(s,10);//第2次输入      
     
                        cout<<s<<endl;      
     
                        return     0;      
  }      
                当用户在第1次输入时,输入字符数大于9,例如输入"1234567890123","0123"自动被第2次个cin.get()接受。这样用户就无法进行第2次输入了。      
                怎么样能解决这个问题啊? 问题点数:20、回复次数:5Top

1 楼du51(郁郁思扬)回复于 2005-05-08 00:21:25 得分 7

#include     <iostream>      
  using   namespace   std;  
  int     main(int     argc,     char*     argv[])      
  {      
          char     s[10],str[80];      
          cin.get(s,10);//第1次输入      
          cout<<s<<endl;  
          cin.get();cin.getline(str,80);    
          cin.get(s,10);//第2次输入        
          cout<<s<<endl;  
          system("PAUSE");  
          return     0;      
  }Top

2 楼du51(郁郁思扬)回复于 2005-05-08 00:21:52 得分 0

取出回车,再取空留下的.就可以了.Top

3 楼w_zforever(舞动的枫叶)回复于 2005-05-08 00:35:11 得分 0

#include     <iostream>      
  using   namespace   std;  
  int     main(int     argc,     char*     argv[])      
  {      
          char     s[10],str[80];      
          cin.get(s,10);//第1次输入      
          cout<<s<<endl;  
          cin.get();cin.getline(str,80);     //多出了一次输入  
          cin.get(s,10);//第2次输入        
          cout<<s<<endl;  
          system("PAUSE");  
          return     0;      
  }  
  --------------------------------------------------------------  
          这样是处理了第1次输入超过边界的问题,  
  但是用户第1输入是在有效范围之内,原来的1、2次输入中间就多出了一次输入。  
  头疼啊.......这问题让我从C郁闷到C++Top

4 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2005-05-08 01:03:55 得分 7

cin.get();cin.getline(str,80);     //多出了一次输入  
  =====  
  你这里多一个cin.get()啦。去掉这个Top

5 楼xjtubox(我爱交大)回复于 2005-05-08 01:29:24 得分 6

 
  #include   <istream>  
  #include   <limits>  
   
  template   <class   charT,   class   traits>  
  inline  
  std::basic_istream<charT,traits>&  
  ignoreLine   (std::basic_istream<charT,traits>&   strm)  
  {  
          //   skip   until   end-of-line  
          strm.ignore(std::numeric_limits<int>::max(),strm.widen('\n'));  
   
          //   return   stream   for   concatenation  
          return   strm;  
  }  
   
  #include     <iostream>  
   
  using   namespace   std;  
   
  int     main(int     argc,     char*     argv[])      
  {      
                        char     s[10];      
     
                        cin.get(s,10);//第1次输入      
     
                        cout<<s<<endl;      
   
                        cin>>ignoreLine;//ignore   the   rest   of   the   line    
                     
                        cin.get(s,10);//第2次输入      
                        cout<<s<<endl;      
                        return     0;      
  }      
  Top

相关问题

  • 模态窗口刷新父窗口的问题.怎样避免父窗口的破碎的闪烁现象,我的父窗口已经用了双缓冲区了,高人指点啊!!!
  • MSComm串口编程,调用 m_comm.get_Input()读缓冲区时,为什么内存泄漏?请高手指点!
  • WinSock缓冲区
  • Socket缓冲区
  • socks缓冲区
  • MSComm串口编程,调用 m_comm.get_Input()读缓冲区时,为什么内存泄漏,如何阻止?难道MSComm有安全漏洞?请高手指点!
  • 无法找到对象???很奇怪o,请高人指点!!!
  • 求人指点
  • 高人指点
  • 清除键盘缓冲区

关键词

  • strm
  • cin
  • 输入cout
  • argc
  • std
  • argv
  • main
  • using namespace
  • get
  • char

得分解答快速导航

  • 帖主:w_zforever
  • du51
  • horisly
  • xjtubox

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo