1

目前我正在使用 Xcode 在我的 Mac 上开发几个 C 程序。但是有1个问题。我的学习要求我通过编码使用某种输入字段。例如,如果用户想要运行程序 10 次或想要程序创建 10 个答案。我使用“atoi(argv[1])”只是为了从用户那里获取输入。

这正是问题所在。一旦我运行程序,它就会开始出现错误,这很正常,因为他正在等待输入并且没有收到它或其他东西。无论如何,我试图通过这个链接解决这个问题:如何从终端运行命令行应用程序?

不幸的是,这也没有解决它。我已经尝试重新安装 xcode,因为在我的终端中输入 gcc 也不起作用,但每次应用商店都会自动为我安装它。

有没有人可以解决我的问题。我将不胜感激,因为下周五我还有另一个截止日期:(如果我的用户输入不起作用,我将无法获得足够的成绩。

再次非常感谢您的帮助!

问候,

基普特斯克里迪

编辑:澄清问题。运行脚本时,我希望它在终端中弹出,并且是否需要输入字段,它应该要求输入。目前,由于缺乏输入,他正在立即崩溃。他不是在等待用户传递参数。他正在跳过那部分

4

3 回答 3

3

HOWTO 将命令行参数从 Xcode IDE 传递给您的程序

  1. 打开项目的活动方案。最简单的方法是从主菜单。选择产品/方案/编辑方案...
  2. 在模式编辑器中,您会在左侧看到几个构建目标;您想要的是“Run YourProjectName”目标。选择它。
  3. 在右侧,您将看到四个子选项卡,包括信息、参数、选项和诊断。选择参数
  4. 添加/删除您需要的任何参数。在您的情况下,添加/phi为第一个参数,然后添加为10第二个。

值得注意的是:这也是您可以在启动时指定程序的当前工作目录的地方,而不是 Xcode 在构建二进制文件时使用的长临时路径。为此:

  1. 从上面执行步骤 1-2。
  2. 选择选项子选项卡
  3. 单击“使用自定义工作目录”复选框。
  4. 指定您希望 Xcode 从中执行程序的完整路径。

结合在程序中修复参数处理应该可以让您启动并运行。

于 2013-02-11T16:03:48.800 回答
2

听起来你想从命令行获取你的参数,如果它们丢失,提示用户输入它们

让我们假设您想要参数:数字字号

#include <stdio.h>
#include <string.h>

int number1;
char word[128];
int number2;

int main(int argc, const char **argv)
{
    if (argc == 4)
    {
        number1 = atoi(argv[1]);
        strcpy(word, argv[2]);
        number2 = atoi(argv[3]);
    }
    else
    {
        do
            printf("Enter number word number: ");
        while (scanf("%d %s %d", &number1, word, &number2) != 3);
    }

    printf("I got %d '%s' %d\n", number1, word, number2);
    return 0;
}

这使:

$ ./test
Enter number word number: 1 andy 12
I got 1 'andy' 12
$ ./test 2 pandy 56
I got 2 'pandy' 56

请注意,此示例中的错误检查很差,可以进行很多改进(不使用atoi()是一种开始方式)。

于 2013-02-11T16:09:07.770 回答
1

正如RageD指出的那样,听起来您需要在程序中检查argc,否则在启动程序时参数不足会导致问题。

gcc 是 c 编译器 - 它生成一个可执行文件。当您在 Xcode 中点击“运行”时,它会编译您的程序,然后运行创建的可执行文件。创建的可执行文件的名称与您的 Xcode 项目名称相同。

要从命令行运行您在 Xcode 中构建的程序:

  • 在 Xcode 的项目导航器中,在“产品”文件夹中找到可执行文件
  • 将可执行文件拖入终端(您将获得可执行文件的绝对网址)
  • 添加运行程序所需的任何参数
  • 点击进入!

结果将类似于下面的代码片段(对于我的“MyCommandLineApp”项目):

$ /Users/pliskin/Library/Developer/Xcode/DerivedData/MyCommandLineApp-hbpuxhguakaagvdlpdmqczucadim/Build/Products/Debug/MyCommandLineApp argument1 argument2
于 2013-02-11T15:57:27.837 回答