为什么这个简单的C命令行工具总是退出而不工作?

时间:2010-08-12 03:02:06

标签: c xcode

我刚刚输入了K& R的例子......

#include <stdio.h>

int main (int argc, const char * argv[]) {

    int c, nl;

    nl = 0;

    while ((c = getchar()) != EOF) {

        if (c == '\n') {
            ++nl;   
        }



    }

    printf("new lines=> %d\n", nl);

    return 0;
}

然而,当我建立&amp;跑,我明白......

minimac:~ alex$ /Users/alex/Documents/K\&R/build/Debug/K\&R ; exit;

您可以收集,运行Mac OS X终端,如果这意味着什么。

为什么这不会提示输入?

更新

以下是我在Mac OS X Snow Leopard上启动项目的方法

  • Ran Xcode
  • 启动了新项目“命令行工具”,并将其命名为K&R
  • 将代码输入main.c
  • 点击“build&amp; run”上方的大按钮
  • 双击K&R,使用上面的输出启动终端

我可能还说我一直都在使用解释语言,所以我不熟悉这个编译过程。

当我使用gcc从终端进行编译时,我可以使用./a.out运行程序。但是,一旦我输入,我不知道如何告诉程序我已经完成了,现在请告诉我我输入了多少行

以下是我的终端的截图...

Terminal http://alexanderdickson.com/hosted/stackoverflow.com/terminal-k-r.png

2 个答案:

答案 0 :(得分:2)

好的,我刚刚按照你在步骤中说的做了,我就可以输入终端了。但是,在我看到程序的输出之前,终端已关闭(因为exit;)。我在开始时添加了#include <unistd.h>,在sleep(2);之前添加了return 0;,我可以看到正确的输出。

这是完整的程序:

#include <stdio.h>
#include <unistd.h>

int main (int argc, const char * argv[]) {

    int c, nl;

    nl = 0;

    while ((c = getchar()) != EOF) {

        if (c == '\n') {
            ++nl;   
        }



    }

    printf("new lines=> %d\n", nl);
    sleep(2);

    return 0;
}

答案 1 :(得分:0)

看起来你在Xcode中这样做了。不确定Xcode如何处理stdin / out以及您正在使用的项目模板。你应该把所有这些都放在一个简单的.c文件中,然后在没有Xcode的情况下自己编写gcc,然后看看会发生什么。

编辑:在Unix控制台中,按Ctrl-D结束stdin输入到命令行程序。 Wikipedia has more.