我有这段代码:
#include <iostream>
using namespace std;
double sqrt(double n)
{
double x;
double y = 2; //first guess is half of the given number
for (int i = 0; i<50; i++)
{
if (n>0)
{
x = n / y;
y = (x + y) / 2;
}
if (n==0)
{
return 0;
}
}
return y;
}
int main()
{
cout << "Square Root Function" << endl;
double z=0;
while (true)
{
cout << "Enter a number = ";
cin >> z;
if (z<0)
{
cout<<"enter a positive number"<<endl;
continue;
}
cout <<"the square root is "<< sqrt(z) << endl;
}
return 0;
}
它会显示这个结果:
Square Root Function
Enter a number = 12
the square root is: 3.4641
但现在代码显示了这些结果:
Square Root Function
1 //my input
Enter a number = the square root is 1
2 //my input
Enter a number = the square root is 1.41421
如果在字符串之后添加了endl,那么cout似乎只会首先出现。这刚刚开始发生。有没有办法解决这个问题以显示正确的输出?
答案 0 :(得分:0)
std::cout
使用缓冲输出,应始终刷新。您可以使用std::cout.flush()
或std::cout << std::flush
。
你也可以使用std::cout << std::endl
写一个换行符然后刷新,这就是你的代码显示这种行为的原因。
将int main()
更改为
int main(){
std::cout << "Square Root Function" << std::endl;
double z=0;
while (true){
std::cout << "Enter a number = " << std::flush
/*^^^^^^^^^^*/
std::cin >> z;
if (z<0){
std::cout << "enter a positive number" << std::endl;
continue;
}
std::cout << "the square root is " << sqrt(z) << std::endl;
}
}
编辑:XCode问题由于您使用XCode,另一件事可能会造成麻烦。似乎XCode在换行之前不会刷新缓冲区;冲洗没有帮助。我们最近有几个问题(例如C++ not showing cout in Xcode console but runs perfectly in Terminal)。它似乎是XCode版本中的一个错误。
尝试按照我的描述刷新缓冲区并尝试使用终端编译它。如果它在那里工作,你的代码很好,它是一个XCode问题。