系统的替代品(“暂停”);再访

时间:2013-12-10 05:24:05

标签: c++ system output

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

}

随意提及我在这里没有停止系统的方法。谢谢,

3 个答案:

答案 0 :(得分:3)

这是因为您的上一个输入(cin >> y2)将换行符留在输入缓冲区中。然后,您可以通过拨打cin.get()PressEnterToContinue()

来阅读此信息

PressEnterToContinue函数中,您可能希望在输入缓冲区"peek"查看是否有任何字符,如果有,则执行额外的cin.ignore


当你这样做时。

cin >> y2;

然后输入输入

123\n

然后输入缓冲区将包含字符串"123\n"。输入操作符提取数字(123)后,输入缓冲区将包含"\n",即cin.get()调用读取。

答案 1 :(得分:1)

要解决此问题,您只需要刷新缓冲区。示例中的数字10000只是要从缓冲区中清除的字符数。

cin.ignore(10000);
cin.get();

并回答为什么cin >> y2在缓冲区中留下换行符是因为您通过点击返回键输入换行符,并通过从控制台检索数据到您的变量中,您将换行符留在后面。

答案 2 :(得分:1)

技术问题:输入缓冲区中剩余字符(有时只是换行符)。

也就是说,程序最终不需要自动停止,因此system( "pause" )或任何停止操作都有没有优势,以及一些问题,包括可移植性。< / p>

从命令行运行程序。

或者,由于您在Windows中编程,请使用Visual Studio并通过Ctrl F5运行该程序。

或者,在main的最后右括号上放置一个断点,然后通过调试器运行程序,例如在视觉工作室通过击中F5。