cin输入问题
自己在写代码时遇到了下面一个问题,但是经过查找没有发现很好的解释~不知道有高手能解答不~O(∩_∩)O~
自己在写杭电1702是遇到的问题
http://acm.hdu.edu.cn/showproblem.php?pid=1702
用下面的代码AC的
[code=C/C++][/code]
#include <iostream>
#include <stack>
#include <queue>
using namespace std;
int main(int argc, char* argv[])
{
int N,num,num1;
//vector<string> s,s1;
char str[12];
cin>>N;
while(N--)
{
cin>>num>>str;
//scanf("%d%s",&num,str);
if('F'==str[2])
{
queue<int> b; //队列
while(num--)
{
cin>>str;
if('I'==str[0])
{
cin>>num1;
b.push(num1);
}
else
{
if(!b.empty())
{
cout<<b.front()<<endl;
//printf("%d\n",b.front());
b.pop();
}
else
cout<<"None"<<endl;
}
}
}
else
{
stack<int> a; //栈
while(num--)
{
cin>>str;
//scanf("%d %s",&num1,str);
if('I'==str[0])
{
cin>>num1;
a.push(num1);
}
else
{
if(!a.empty())
{
cout<<a.top()<<endl;
a.pop();
}
else
cout<<"None"<<endl;
}
}
}
}
return 0;
}
标红的部分自己一开始写成了下面的形式
[code=C/C++][/code]
cin>>str>>num1;
if('I'==str[0])
{
b.push(num1);
}
结果运行时,多组输入出现的是无限循环,为什么呢?
[解决办法]
题目挺有意思,按照描述,我写了一个程序供参考:
- C/C++ code
#include <iostream>#include <string>#include <sstream>#include <stack>#include <queue>#include <algorithm>int main(int, char**){ const std::string FIFO = "FIFO"; const std::string FILO = "FILO"; const std::string MY_IN = "IN"; const std::string MY_OUT = "OUT"; std::istringstream is; std::string line; std::queue<int> output; // 最终的输出结果队列 int total_cases; std::getline(std::cin, line); is.str(line); is >> total_cases; while (std::getline(std::cin, line)) { // 每次从标准输入读取移行 is.clear(); // 重置istringstream对象状态 is.str(line); // 设置istringstream对象缓冲区内容 int number; std::string flag; is >> number >> flag; // 解析是FIFO,还是FILO std::string tmp; int data; if (FIFO == flag) { // FIFO std::queue<int> q; for (int i = 0; i < number; ++i) { std::getline(std::cin, line); // 解析子问题 is.clear(); is.str(line); is >> tmp; if (MY_IN == tmp) { is >> data; q.push(data); } else { if (!q.empty()) { int out = q.front(); output.push(out); q.pop(); } else { output.push(0); // 0 代表 none } } } if (--total_cases == 0) { break; } } else { // FILO std::stack<int> s; for (int i = 0; i < number; ++i) { std::getline(std::cin, line); is.clear(); is.str(line); is >> tmp; if (MY_IN == tmp) { is >> data; s.push(data); } else { if (!s.empty()) { int out = s.top(); output.push(out); s.pop(); } else { output.push(0); } } } if (--total_cases == 0) { break; } } } std::cout << "the output is as follows:" << std::endl; while (!output.empty()) { if (0 == output.front()) { std::cout << "none" << std::endl; } else { std::cout << output.front() << std::endl; } output.pop(); }}