系统( "Pause" 的替代品 );重新审视

Alternative to system("Pause"); revisited

本文关键字:新审视 Pause 系统 替代品      更新时间:2023-10-16

我知道这个问题已经被问了一百万次了,但我有一个编码问题,因为有几个替代方案似乎不适用于这个代码,我不知道为什么。如果您在返回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。