计算C中的行,单词,字符

时间:2015-08-05 05:08:18

标签: c

此代码取自K& C编程。 R.我是C编程的新手,我在理解这段代码时几乎无需帮助。这段代码给了我错误,请帮我解决这个问题

#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words, and characters in input */
main()
{
    int c, nl, nw, nc, state;

    state = OUT;
    nl = nw = nc = 0;
    while ((c = getchar()) != EOF) {
        ++nc;
        if (c == '\n') ++nl;
        if (c == ' ' || c == '\n' || c = '\t') state = OUT;
        else if (state == OUT) {
        state = IN;
        ++nw;
        }
    }
    printf("%d %d %d\n", nl, nw, nc);
}

错误:

E:\Files\C\main.c:5:1: warning: return type defaults to 'int' [-Wreturn-type]
E:\Files\C\main.c: In function 'main':
E:\Files\C\main.c:14:40: error: lvalue required as left operand of assignment
E:\Files\C\main.c:21:1: warning: control reaches end of non-void function [-Wreturn-type]

3 个答案:

答案 0 :(得分:4)

您要为 c 指定值,而不是比较。

if (c == ' ' || c == '\n' || c = '\t') state = OUT;

应该是

if (c == ' ' || c == '\n' || c == '\t') state = OUT;

您的主要功能应该是int main(void),并在最后添加return 0

答案 1 :(得分:2)

您要分配值而不是比较它:if (c == ' ' || c == '\n' || c = '\t')==用于比较,=用于分配。

答案 2 :(得分:0)

首先在第5行将主要功能更改为int main()

同样在第13行尝试使用==使其与下面显示的方式相同。

if (c == ' ' || c == '\n' || c == '\t') state = out;  //你指定一个值

还要终止程序,最后写回0;