系统( "pause" ) 不适用于 freopen
system("pause") won't work with freopen
见下面的评论
int main(){
//freopen("input.txt","r",stdin);//if I uncomment this line the console will appear and disappear immediately
int x;
cin>>x;
cout<<x<<endl;
system("pause");
return 0;
}
如何让它工作?
方案一:用cin.ignore
代替system
:
...
cout<<x<<endl;
cin.ignore(1, 'n'); // eats the enter key pressed after the number input
cin.ignore(1, 'n'); // now waits for another enter key
...
解决方案2:如果你使用的是MS Visual Studio,按Ctrl+F5
解决方案3:重新打开con
(只适用于Windows,似乎你的情况)
...
cout<<x<<endl;
freopen("con","r",stdin);
system("pause");
...
如果您使用解决方案3,不要忘记添加注释,说明代码正在做什么以及为什么:)
使用std::ifstream
代替重定向stdin:
#include <fstream>
#include <iostream>
int main()
{
std::ifstream fin("input.txt");
if (fin)
{
fin >> x;
std::cout << x << std::endl;
}
else
{
std::cerr << "Couldn't open input file!" << std::endl;
}
std::cin.ignore(1, 'n'); // waits the user to hit the enter key
}
(从anatolyg的回答中借用了cin.ignore
的技巧)
使用freopen
更改程序的标准输入。您启动的任何程序都继承您的程序的标准输入,包括pause
程序。pause
程序从input.txt读取一些输入,然后终止
相关文章:
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 适用于 WebView2 旧版本的示例应用程序
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- __attribute__(优化(0))) 是否适用于"recursively"?
- 为什么 std::erase(std::erase_if) 不是适用于<algorithm>任何容器的模板?
- 使用一个参数的模板函数时出错(适用于 2)
- 使用 适用于 Android 和 iOS 的 tf-lite C++ API
- 为什么这适用于 G++ 而不是 CLANG?
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 适用于 Linux 的 c++ 上的代理脚本
- 为什么我的 SFINAE 表达式不再适用于 GCC 8.2?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 模板函数仅适用于VS
- 如何在cmake中包含适用于g++或viceversa的库
- 适用于win32、linux、mac的POSIX C包装器
- WinDBG适用于从Visual Studio 2015保存的转储,但不适用于任务管理器。显示异常代码"not found"
- 从uint8_t到NPY_UINT16 PyArray_SimpleNewFromData.适用于Linux,但不适用于