我知道这个问题已被问了一百万次,但我有一个编码问题,因为有几个替代方案似乎不能使用这个代码,我不知道为什么。如果你在返回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;
}
随意提及我在这里没有停止系统的方法。谢谢,
答案 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。