c++ cin 读入txt的问题

源程序

#include <iostream>
using namespace std;

struct Stack
{
    int tos;
    int stackarray[1000];
};

Stack S;

void push(int a) {
    S.tos++;
    S.stackarray[S.tos] = a;
}

void pop() {
    if (S.tos == -1)
        cout << "false" << " ";
    else
    cout << S.stackarray[S.tos] << " ";
    S.tos--;
}
int main()
{
    S.tos = -1;
    string cmd;
    cin >> cmd;
    if (cmd == "pop") {
        cout << "false";
        return 0;
    }
    int number;
    cin >> number;
    push(number);
    while(S.tos >= -1) {
        cin >> cmd;
        if (cmd == "pop")
            pop();
        else if (cmd == "push") {
            cin >> number;
            push(number);
        }
    }
    return 0;
}
//a.exe <A-1-in.txt >myoutput.txt

cmd

扫描二维码关注公众号,回复: 7467648 查看本文章

原因是cin遇到txt文件终止符EOF后仍未结束,具体可能与缓冲有关,还是在cin pop导致

在while循环加入判断

#include <iostream>
using namespace std;

struct Stack
{
    int tos;
    int stackarray[1000];
};

Stack S;

void push(int a) {
    S.tos++;
    S.stackarray[S.tos] = a;
}

void pop() {
    if (S.tos == -1)
        cout << "false" << " ";
    else
    cout << S.stackarray[S.tos] << " ";
    S.tos--;
}
int main()
{
    S.tos = -1;
    string cmd;
    cin >> cmd;
    if (cmd == "pop") {
        cout << "false";
        return 0;
    }
    int number;
    cin >> number;
    push(number);
    while(S.tos >= -1) {
        if(cin.eof())
        break;
        cin >> cmd;
        if (cmd == "pop")
            pop();
        else if (cmd == "push") {
            cin >> number;
            push(number);
        }
    }
    return 0;
}
//a.exe <A-1-in.txt >myoutput.txt

之后

cmd

注意这样做,命令行输入^Z还是有问题。

应该还是缓冲区问题。具体以后再说吧

猜你喜欢

转载自www.cnblogs.com/lqerio/p/11680254.html