读书人

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

发布时间: 2012-04-28 11:49:53 作者: rapoo

请教一个关于输入流的问题
就是想问下,为什么有时候用输入流从控制台获取输入,还没输入,就执行过去了?期间没有要求用户任何的输入,就这样神奇的执行过去了!!想请教下这是为什么,贴上代码让大家看看
问题代码段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');

读书人网 >C++

热点推荐