我在xcode中的c ++代码停止正常工作

时间:2017-04-12 05:34:23

标签: c++ xcode

我有这段代码:

#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似乎只会首先出现。这刚刚开始发生。有没有办法解决这个问题以显示正确的输出?

1 个答案:

答案 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问题。