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

cin输入有关问题

2012-09-10 
cin输入问题自己在写代码时遇到了下面一个问题,但是经过查找没有发现很好的解释~不知道有高手能解答不~O(∩

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

热点排行