2017-10-06 102 views
0

该输入从文件重定向到可执行在UNIX终端:CIN不会暂停对输入尽管同时使用cin.clear()和cin.ignore()

10 1 2 3 4 5 6 7 8 9 10 
5 10 20 30 40 50 

CIN不等待输入,即使它看起来处于良好的状态。

int main(void) { 
    std::cout << "GOOD: " << std::cin.good() << std::endl 
       << "EOF: " << std::cin.eof() << std::endl 
       << "FAIL: " << std::cin.fail() << std::endl 
       << "BAD: " << std::cin.bad() << "\n\n"; 
    int s; 
    while(std::cin >> s) { 
      int * arr = new int[s]; 
      for(int i = 0; i < s; i++) { 
        std::cin >> arr[i]; 
        std::cout << arr[i] << " "; 
      } 
      std::cout << "\n\n"; 
      delete[] arr; 
    } 

    std::cout << "CAN READ: " << (bool)(std::cin >> s) << std::endl 
       << "GOOD: "<< std::cin.good() << std::endl 
       << "EOF: "<< std::cin.eof() << std::endl 
       << "FAIL: "<< std::cin.fail() << std::endl 
       << "BAD: "<< std::cin.bad() << "\n\n"; 

    std::cin.clear(); 
    std::cin.ignore(INT_MAX); 

    std::cout << "GOOD: " << std::cin.good() << std::endl 
       << "EOF: " << std::cin.eof() << std::endl 
       << "FAIL: " << std::cin.fail() << std::endl 
       << "BAD: " << std::cin.bad() << "\n\n"; 

    std::cin.clear(); 

    std::cout << "GOOD: " << std::cin.good() << std::endl 
       << "EOF: " << std::cin.eof() << std::endl 
       << "FAIL: " << std::cin.fail() << std::endl 
       << "BAD: " << std::cin.bad() << "\n\n"; 

    std::cout << "Enter a #:\n"; 
    std::cin >> s; // unable to provide input (EDIT: from keyboard) here 
    std::cout << s << std::endl; 

    std::cout << "Program ends.\n"; 
    return 0; 
} 

输出是

GOOD: 1 
EOF: 0 
FAIL: 0 
BAD: 0 

1 2 3 4 5 6 7 8 9 10 

10 20 30 40 50 

CAN READ: 0 
GOOD: 0 
EOF: 1 
FAIL: 1 
BAD: 0 

GOOD: 0 
EOF: 1 
FAIL: 0 
BAD: 0 

GOOD: 1 
EOF: 0 
FAIL: 0 
BAD: 0 

Enter a #: 
5 
Program ends. 

缺少什么我在这里?为什么cin不允许我提供它的输入,即使它的缓冲区是空的并且流处于良好状态?我能做些什么来让cin接受进一步的输入?

+0

cin被重定向到文件...你想如何提供文件输入时,直到结束? –

回答

0

使用cin.flush();输入一个整数后。它将刷新流,然后您可以再次输入字符串。 如果你想知道它为什么会发生,你可以阅读它here