【问题标题】:Running C scripts with terminal instead of Xcode使用终端而不是 Xcode 运行 C 脚本
【发布时间】:2013-01-26 17:26:59
【问题描述】:

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

这正是问题所在。一旦我运行程序,它就会开始出现错误,这很正常,因为他正在等待输入并且没有收到它或其他东西。无论如何,我试图通过这个链接解决这个问题:How to run command-line application from the terminal?

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

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

再次感谢您的帮助!

您好,

基普·斯克里迪

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

【问题讨论】:

  • 请更好地描述您的问题;这没有多大意义。它们是什么类型的应用程序?可可,命令行?
  • 希望这会更好! :) 我使用 Xcode,我编写的脚本是一个“命令行工具”,我想在 terminal.app 中运行它
  • 你为什么不直接打开一个终端窗口,然后在那里运行呢?
  • 您需要在程序中勾选argc。如果它没有您期望的参数数量(即如果用户没有通过./yourprogram <arg1> <arg2> ... 执行应用程序,则使用scanf 要求用户输入。
  • @Mats Petersson:这也是我的想法,但不幸的是我的终端将 gcc 命令识别为 c 编译器。

标签: c xcode compiler-construction terminal user-input


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的耐心等待,我知道您与初学者交谈时会感到沮丧!真的很感激。业力+10! PS:如果我能给你更多的信任,我会做到的:(
  • @KiptScriddy 您还应该认真考虑按照 trojanfoe 在他的回答中提出的建议。让程序检查正确的参数,如果存在,就运行。如果没有,则在您的程序中提示用户输入它们。这个答案值得一票,我将给予它,你也应该这样做。在这个答案和这个答案之间,您将非常适合输入处理。
  • 确实如此,但是对于这个任务,它只需要从终端输入
【解决方案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() 是一种开始方式)。

【讨论】:

  • +1 在运行将 cmdline 参数作为可选提示数据的程序时,这总是一个好主意,并且值得投票。
【解决方案3】:

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

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

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

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

结果将类似于下面的 sn-p(对于我的“MyCommandLineApp”项目):

$ /Users/pliskin/Library/Developer/Xcode/DerivedData/MyCommandLineApp-hbpuxhguakaagvdlpdmqczucadim/Build/Products/Debug/MyCommandLineApp argument1 argument2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2012-04-18
    • 2020-08-14
    • 2018-10-10
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多