所以我写了这个C代码但是找不到为什么编译器没有得到else if语句的错误.
#include<stdio.h>
#define IN 1
#define OUT 0;
main() {
int c, nl, nw, nc, state;
c = nl = nw = nc = 0;
state = OUT;
while((c = getchar()) != EOF) {
++nc;
if(c == '\n')
++nl;
if(c == '\n' || c == '\t' || c == ' ')
state = OUT;
else if(state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
我收到一条错误,上面写着''else'没有先前的'if'"
正如Jean-FrançoisFabre 在评论中指出的那样,你的问题是这个后面的分号#define:
#define OUT 0;
Run Code Online (Sandbox Code Playgroud)
这会使您的代码看起来像这样:
if(c == '\n' || c == '\t' || c == ' ')
state = OUT;
; // The "else" would go here, but you've already completed the "if"
else if(state == OUT) { // Now there is no "if" to associate with
state = IN;
++nw;
}
Run Code Online (Sandbox Code Playgroud)
预处理器能够引发这样的各种问题,这是在可能的情况下避免它的一个很好的理由.(这来自一个用cpp来做肮脏,恶心的事情的人).
在这种情况下,匿名enum是要走的路:
enum {
OUT = 0,
IN = 1,
};
Run Code Online (Sandbox Code Playgroud)
此外,这是一个风格问题,但我总是包括花括号,除了没有的简单条件else:
// OK
if (ok)
foo();
// Not OK
if (ok)
foo();
else if (x == 3) {
lots();
of();
stuff();
}
else
bad();
Run Code Online (Sandbox Code Playgroud)