我有一个简单的代码为例:
#include <iostream>
int main(int argc, const char * argv[]){
int a, b, c;
std::cin >> a >> b >> c ;
std::cout << a << " "<< b << " " << c;
}
我想传递此代码,该参数" 1 2 3"在名为file.txt的文本文件中,位于同一文件中。
在产品>编辑方案中,我选择"运行参数侧栏"选项,然后选择"参数"选项卡。在"启动启动的论点"下,我输入&lt;file.txt选择确定并运行我的程序。该程序构建并运行,但不会在file.txt中传递" 1 2 3"参数。我还有其他一些设置吗?我把文件放在错误的文件夹中吗?真的很想做这项工作,以便我可以在大量数据集上测试代码,这些数据会烦人。
如果我cout&lt;&lt;argv [1]我得到"&lt;"如果我不引用。如果我引用了参数,我会得到"&lt; text.txt。"
不幸的是,Xcode并不像您所要求的那样直接支持命令行文件重定向。该参数用于在main
中设置argv
向量。当您在命令行上运行程序时,Shell(通常是/bin/bash
)解释并设置重定向,并且不会将这些位传递给程序作为参数。Xcode不使用Shell启动您的程序,也不会设置重定向。
您可以通过Xcode获得的最接近,而无需更改源代码,需要两个步骤:
-
在您计划的运行设置中,在"信息"选项卡中,将可执行文件设置为
/bin/sh
。您需要从弹出菜单中选择"其他…"才能获取打开的对话框,然后键入/bin/sh
。在打开对话框中键入/
时,您将获得一个弹出文本框。 -
在"参数"选项卡中,添加此参数:
-c "$TARGET_BUILD_DIR/$EXECUTABLE_PATH < /path/to/text.txt"
将
/path/to/text.txt
替换为输入文件的路径。
这将运行一个外壳,并要求外壳使用输入重定向运行您的程序,您会发现Xcode忽略了您的断点,因此很难调试您的程序。