Начало работы с C с использованием K & R C Programming Language Book - PullRequest
2 голосов
/ 20 декабря 2009

В целях самосовершенствования / расширения своих горизонтов я решил изучить некоторые основы C, используя K & R 'C Programming Language Book'.

Я выполнял упражнения, используя Bloodhsed DEV C ++ 4.9.9.2 в качестве своей IDE.

Я наткнулся на следующее упражнение - подсчет символов на входе:

main()
{
    double nc;
    for(nc = 0; getchar() != EOF; ++nc);
    printf("&.0f\n", nc);
}

Этот код соответствует и работает без ошибок.

Однако, когда я ввожу строку в окне консоли и нажимаю ввод, я не получаю никакого вывода, то есть число, показывающее, сколько символов в строке. Например, если я наберу «test» в окне консоли, я ожидаю, что 4 появится в качестве вывода.

Уверен, проблема в том, как я настроил свою IDE? Или я упускаю что-то более фундаментальное?

Любая помощь высоко ценится. Получив образование в VB, я очень рад изучению другого языка, например C, и овладению указателями!

Редактировать

Здесь также дан соответствующий ответ на мой вопрос, который очень полезен: Почему getchar () не распознает return как EOF на консоли?

Ответы [ 3 ]

10 голосов
/ 20 декабря 2009

Вы не получите никакого вывода, пока стандартный поток ввода не будет закрыт (либо с CTRL Z под Windows, либо с CTRL D под различные вкусы UNIX).

Новая строка - просто еще один символ.

Возможно, вы также захотите получить более свежую учебную книгу по Си. main() больше не является одним из обязательных основных прототипов для ISO C, вы должны использовать один из:

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

Кроме того, ваш код, показанный , не будет компилироваться, поскольку вы не завершаете строку формата printf. Использование:

printf("%.0f\n", nc);

вместо:

printf("&.0f\n, nc);

Почему вы используете double - тоже загадка, если вы не хотите обрабатывать действительно большие файлы - для этого я бы использовал int или long.

Вот код, который я буду использовать:

#include <stdio.h>
int main (void) {
    long nc;
    for (nc = 0; getchar() != EOF; ++nc)
        ;
    printf("%ld\n", nc);
    return 0;
}

, который производит следующий сеанс:

pax> countchars
Hello there.<ENTER>
My name is Bob.<ENTER>
<CTRL-D>
29

pax>
1 голос
/ 20 декабря 2009

Заменить:

printf("&.0f\n, nc);

до

printf("%.0f\n", nc);
0 голосов
/ 01 июня 2015

Код, который вы дали, верен, но, похоже, он не работает. В моем случае это также не работало, поэтому я просто заменил EOF на '\ n', и это сработало для меня, но только для одной строки, так как после нажатия Enter он выводит и программа заканчивается. Пожалуйста, найдите полный код ниже:

#include <stdio.h>
/* Count characters in input; version 2*/

int main(void)
{
    double nc;
    for (nc = 0; getchar() != '\n'; ++nc);
    printf("%.0f \n", nc);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...