我试图找出调用 C++ 程序的 R 脚本中的错误。 R 告诉我,我的 C++ 返回了 NA - 但当我查看程序时,情况似乎并非如此。在 R 中没有任何会导致 NA 的调用。因此我的问题是,如果 R 可能永远不会捕获 C++ 程序的输出,因为 return 0
在所有输出被写入控制台之前被调用。
我的程序确实向控制台写入了一些数字。每行一个数字,最后一行以endl
结束。
main()
{
cout<<33.12<<"\n"; //print a couple of number to cout
cout<<9711.3<<"\n"<<5699.14<<endl;
return 0;
}
我的 R-Script 做这样的事情:
x <- as.numeric(system("./myProgram", intern=T))
if(any(is.na(x))) {
stop("Wooppp, x is NA: ", x)
}
难道 R 没有从程序中获取 cout 输出? 这个问题与相应的 R 问题相关: DEOptim keeps telling: NaN value of objective function
最佳答案
一般来说,是的,在 main() 结束之前可能有部分输出尚未刷新。但是,到程序结束时,无论如何都应该刷新所有内容。
更多细节,main 只是一个函数,对于程序员来说这是程序的入口点,尽管实际上运行时在这个调用之前/之后做了一些部分。这包括加载共享对象、调用全局变量的析构函数以及作为普通程序员实际上不应该知道的一些其他内容。
由于 std::cout 是一个全局对象,它将使用其析构函数刷新正确的数据。虽然大多数实现在“\n”字符上刷新(认为不需要),但 std::endl 和 std::flush(我认为这是必需的),无论如何这个例子应该没问题。
我会尝试拆分这个问题,并尝试将 C++ 程序的输出推送到文件以便稍后读取(均来自同一个 R 程序),尝试控制台输入 ...
关于c++ - main() 能否在所有 cout 写入控制台之前返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35731217/