系统( "Pause" 的替代品 );重新审视
Alternative to system("Pause"); revisited
我知道这个问题已经被问了一百万次了,但我有一个编码问题,因为有几个替代方案似乎不适用于这个代码,我不知道为什么。如果您在返回0;之前查看;,我正在尝试cin.get(),它不会停止程序,我在其他程序上找到的PressEnterToContinue()函数也不会停止。我唯一要做的就是系统暂停,我不想使用它,因为我也将使用这个跨平台。有什么想法吗?
#include <iostream>
using namespace std;
void PressEnterToContinue()
{
std::cout << "Press ENTER to continue... " << std::flush;
std::cin.ignore(std::numeric_limits <std::streamsize> ::max(), 'n');
}
int main(void)
{
int pause;
double distance, x1, y1, x2, y2, x, y;
cout << "This program outputs the distance between two points on a plane!" << endl;
cout << "Please input point X1" << endl;
cin >> x1;
cout << "Please input point Y1" << endl;
cin >> y1;
cout << "Please input point X2" << endl;
cin >> x2;
cout << "Please input point Y2" << endl;
cin >> y2;
x = x2 - x1;
y = y2 - y1;
distance = sqrt(x*x + y*y);
cout << distance << endl;
//cin.get();
//PressEnterToContinue();
//system("Pause");
return 0;
}
请随意提及我在这里没有的停止系统的方法。谢谢,
这是因为您的最后一个输入(cin >> y2
)将换行符留在输入缓冲区中。然后,您对cin.get()
或PressEnterToContinue()
的调用会读取此信息。
在PressEnterToContinue
函数中,您可能想"窥探"输入缓冲区,先看看是否有字符,如果有,再做一个额外的cin.ignore
。
当你这样做时,例如
cin >> y2;
然后输入
123n
然后,输入缓冲器将包含字符串"123n"
。输入运算符提取数字(123
)后,输入缓冲区将包含"n"
,即cin.get()
调用读取的数字。
要解决这个问题,只需刷新缓冲区。示例中的数字10000
只是要从缓冲区中清除的字符数。
cin.ignore(10000);cin.get()
要回答cin >> y2
在缓冲区中留下换行符的原因,是因为您通过点击回车键输入了换行符,并且通过将数据从控制台检索到变量中,您留下了换行符。
技术问题:输入缓冲区中留下了字符(有时只是换行符)。
也就是说,程序永远不需要在最后自行停止,因此system( "pause" )
或任何停止操作都没有优点,而且存在一些问题,包括可移植性。
从命令行运行程序。
或者,由于您在Windows中编程,请使用Visual Studio并通过Ctrl F5运行程序。
或者,在main
的最后一个右大括号上放置一个断点,并通过调试器运行程序,例如在visual studio中点击F5。
- 使用新行和不使用新行读取文件
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 遇到新行时,有没有办法停止istream_iterator
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 模板元编程:如何将参数包组合成新的参数包
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 如何使用CLion在Mac上创建一个新的.txt文件
- 错误-我无法在VS2019中打开新的Qt项目
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 在cygwin中测试新的boost安装时出现cpp错误
- C++:继续创建新的变量可以吗
- Qt:当QListView获得新条目时,如何更新QStringList
- 为C++03编译器编写部分unique_ptr,该编译器与较新的编译器在公共代码库上运行
- c++20[[no.unique_address]]中的新功能是什么
- 将指针类分配给新类,C++
- 如何使用新运算符跟踪在循环中创建的 QLabel
- 系统( "Pause" 的替代品 );重新审视