Почему этот простой инструмент командной строки C всегда выходит без работы? - PullRequest
0 голосов
/ 12 августа 2010

Я только что набрал пример из 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;
}

Однако, когда я собираю и запускаю, я получаю ...

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

Как вы можетебыть в состоянии собрать, запустив терминал Mac OS X, если это что-то значит.

Почему это никогда не запрашивает ввод?

Обновление

Вот какЯ запустил свой проект в Mac OS X Snow Leopard

  • Запустил Xcode
  • Запустил новый проект "Инструмент командной строки" и назвал его K&R
  • Набран вкод в main.c
  • Нажмите большую кнопку над надписью "build & run"
  • Двойной щелчок K&R и терминал был запущен с выводом выше

Я мог бы также заявить, что я использовал интерпретированные языки почти всю свою жизнь, поэтому я новичок в этом процессе компиляции.

Когда я использую gcc для компиляции из терминала, я могу запустить программу с./a.out.Однако, как только я наберу текст, я не знаю, как сказать программе Я закончил, теперь, пожалуйста, скажите мне, сколько строк я набрал .

Вот скриншотмой терминал ...

терминал http://alexanderdickson.com/hosted/stackoverflow.com/terminal-k-r.png

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

ОК, я только что сделал то, что вы сказали на ваших шагах, и я могу набрать в терминале.Однако, прежде чем я увижу вывод программы, терминал закрывается (из-за 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;
}
0 голосов
/ 12 августа 2010

Похоже, вы делаете это в Xcode. Не уверен, как Xcode обрабатывает stdin / out и какой шаблон проекта вы используете. Вы должны иметь все это в простом файле .c и просто скопировать его самостоятельно без Xcode и посмотреть, что произойдет потом.

Редактировать: в консоли Unix вы нажимаете Ctrl-D, чтобы завершить ввод стандартного ввода в программу командной строки. В Википедии больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...