Помощь с примером подсчета символов K & Rs - PullRequest
3 голосов
/ 02 ноября 2009

Я пробираюсь через 2-е издание K & R, и меня озадачил этот, казалось бы, простой пример:

#include <stdio.h>

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

Это просто не работает правильно. Я добавил в часть (getchar() != '\n'), чтобы завершить программу, когда нажимаю клавишу ввода, но это действительно тоже не поможет.

Ниже приведен пример вывода с использованием gcc, поставляемого с инструментами разработки Mac OSX 10.6.

pool-000:Desktop user$ ./a.out 
a
0
pool-000:Desktop user$ ./a.out 
asdf

2
pool-000:Desktop user$ ./a.out 
asfasf

3

Так что что-то явно не так. Я на странице 18, если это поможет. Это не домашняя работа, это для развлечения!

Спасибо :)

Ответы [ 2 ]

5 голосов
/ 02 ноября 2009

Каждый вызов getchar() будет ждать чтения символа, поэтому вы читаете больше, чем вы думаете за одну итерацию цикла.

Кроме того, по крайней мере, на мой взгляд, счетчик (почти) никогда не является double, вы должны использовать целочисленный тип, такой как обычный старый int.

3 голосов
/ 02 ноября 2009

Проблема с выполнением двух операций "getchar ()" заключается в том, что вы прочитаете ДВА символа в условном тесте ... прежде чем перейдете к ++ c.

Откажитесь от сравнения "EOF", и оно должно работать так, как вы ожидаете.

...