首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个关于输入流的有关问题

2012-04-28 
请教一个关于输入流的问题就是想问下,为什么有时候用输入流从控制台获取输入,还没输入,就执行过去了?期间

请教一个关于输入流的问题
就是想问下,为什么有时候用输入流从控制台获取输入,还没输入,就执行过去了?期间没有要求用户任何的输入,就这样神奇的执行过去了!!想请教下这是为什么,贴上代码让大家看看
问题代码段1:
  //ASCII解码方式
string strSendOutASCII = "";
string temptemp = "";
//ASCII临时变量
char tempASCII = ' ';

cout << "请输入字码进行解码,输入结束时请按空格结尾:" << endl;
  //就下面这段出问题了char buffer[1024] ; char* pScanner
cin.getline(buffer,1023,'\n');
pScanner = buffer;
问题代码段2:
  //用于存储用户输入
  string playerInput;
cout << "Game Start!" << endl;
while(true)
{
  //生成字符串
generateString();
  //将生成的字符串输出
cout << resourceString << endl;
startTime = time((time_t*)NULL);
  //获取用户输入,就是这里出了问题,明明执行,却没有要求从控制台
getline(cin,playerInput,'\n');
elapsedTime = time((time_t*)NULL);
  //部分省略
  }

[解决办法]
用scanf,getchar等读取字符串或者字符的时候容易出现缓冲区残留'\n'的情况。
于是下次读取的时候,就会读取到'\n'.
为了防止这种情况,可以在scanf/getchar函数之前加下面三条语句之一:
标准:rewind(stdin);
windows扩展:fflush(stdin);
暴力:stdin->_cnt=0;


getline同理.
c++方法:
cin.ignore(256,'\n');//add
getline(cin,playerInput,'\n');

热点排行