Ctrl + Z无法在循环时退出

时间:2014-10-15 03:07:52

标签: c++ windows eof

我一直在环顾四周,尝试了很多方法,但不能为我的生活让Ctrl Z退出控制台。这是我的代码,有人可以指出我正确的方向:

这是在Windows上。

int main()
{
    string s;
    Stack *stack = new Stack();
    while (cin >> s)
    {
        if (cin)
        {
            for (int i = 0; i < (int)s.length(); i++)
            {
                stack->push(s[i]);
            }
            for (int i = 0; i < s.length(); i++)
            {
                cout << stack->top();;
                stack->pop();
            }

            cout << endl;
        }
    } 
    stack->~Stack();
    delete stack;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

在Windows上,按 Ctrl - Z 发出EOF信号。在Linux上,它是 Ctrl - D 。在任一系统中,您需要在行的开头按下它(即,在按下回车后)。

顺便说一句,没有必要明确地调用析构函数。摆脱这一行:

<击>

stack->~Stack();

事实上,如果你完全摆脱newdelete,情况会好一些。那些闻起来像Java-isms。在C ++中,您不必总是使用new来创建新对象。更基本的语法是写:

Stack stack;

这将创建一个Stack对象并调用默认的no-arg构造函数。 main()退出时,对象将自动销毁,因此您不需要delete或显式析构函数调用。

最后,if (cin)检查是多余的。 while循环已检查是否已读取字符串。

while (cin >> s)
{
    if (cin)
    {
        ...
    }
}

答案 1 :(得分:-1)

由于您使用的是内置堆栈,因此您不需要使用 .-&gt; ,并且不需要 if(cin) while(cin&gt;&gt; s)检查时,exertion流是否已到达结尾。这是正确的代码。

#include <string>
#include <stack>
#include <iostream>
#include <fstream>

using namespace std;
int main()
{
     string s;
     stack <string> st;

     while (cin >> s)
     {
            st.push(s);
            cout << st.top();;

            st.pop();
            cout << endl;

      }

     st.~stack();

     return 0;

}