Короче, программа:
#define yes 1
#define no 0
main()
{ /* count lines, words,
* chars in input */
int c, nl, nw, inword;
inword = no;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (с== '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
inword = no;
else if (inword == no) {
inword = yes;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
Если ее пытаться скомпилировать:
user@devel-server:~/cl$ gcc ./or.c
./or.c: In function ‘main’:
./or.c:11:19: error: ‘nc’ undeclared (first use in this function)
nl = nw = nc = 0;
^
./or.c:11:19: note: each undeclared identifier is reported only once for each function it appears in
./or.c:12:35: error: ‘EOF’ undeclared (first use in this function)
while ((c = getchar()) != EOF) {
^
./or.c:14:17: error: stray ‘\321’ in program
if (с== '\n')
^
./or.c:14:17: error: stray ‘\201’ in program
./or.c:14:23: error: expected expression before ‘==’ token
if (с== '\n')
^
./or.c:23:9: warning: incompatible implicit declaration of built-in function ‘printf’
printf("%d %d %d\n", nl, nw, nc);
^
А вот прога с исправлениями:
#include <stdio.h>
#define YES 1
#define NO 0
int main() {
/* count lines, words,
* chars in input */
int c, nl, nw, inword, nc;
inword = NO;
nl = NO;
nw = NO;
inword = NO;
c = getchar();
while (c != EOF) {
++nc;
if ( c == '\n' ){
++nl;
}
if (c == ' ' || c == '\n' || c == '\t') {
inword = NO;
}
else {
if (inword == NO) {
inword = YES;
++nw;
}
}
c = getchar();
}
printf("%d %d %d\n", nl, nw, nc);
}
Вот учебник: http://linux.yaroslavl.ru/docs/prog/c/ch01.html#1.5.3 Короче, вот задание:
Переделайте программу подсчета слов, используя лучшее определение «слова»; считайте, например словом последовательность букв, цифр и апострофов, начинающуюся с буквы.
Вот вам и учебник!!!!! Его автор даже исходник на ошибки проверить не может!!!!
P.S.
Правильно назвать задание надо было бы:
Проверь программу подсчета строк на ошибки