我尝试在调用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
答案 0 :(得分:0)
通常,是的,在main()结束之前,部分输出可能尚未刷新。但是,到程序结束时,无论如何都应该刷新所有内容。
更多细节,main只是一个函数,对于程序员来说这是程序的入口点,但实际上运行时会在此调用之前/之后执行某些部分。这包括加载共享对象,调用全局变量的析构函数以及其他一些你不了解常规程序员的东西。
由于std :: cout是一个全局对象,它将使用它的析构函数来刷新正确的数据。虽然大多数实现都在&#34; \ n&#34;字符(不要认为它是必需的),std :: endl和std :: flush(我认为这是必需的),无论如何这个例子应该没问题。
我会尝试拆分这个问题,并尝试将C ++程序的输出推送到文件后再读取它(都来自同一个R程序),尝试控制台输入......