读书人

cin输入有关问题

发布时间: 2012-09-10 11:02:32 作者: rapoo

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();  }} 

读书人网 >C++

热点推荐