在本练习中,您将编写一个程序来打印输入中单词长度的直方图。
以下代码来自《The C Answer Book》:
#include <stdio.h>
#define MAXHIST 15 // max length of histogram
#define MAXWORD 11 // max length of a word
#define IN 1 // inside a word
#define OUT 0 // outside a word
// print horizontal histogram
int main(int argc, const char * argv[]) {
int c, i, nc, state;
int len; // length of each bar
int maxvalue; // maximum value for wl[]
int ovflow; // number of overflow words
int wl[MAXWORD]; // word length counters
state = OUT;
nc = 0; // numbers of chars in a word
ovflow = 0; // number of words >= MAXWORD
for (i = 0; i < MAXWORD; ++i)
wl[i] = 0;
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c == '\t') {
state = OUT;
if (nc > 0)
if (nc < MAXWORD)
++wl[nc];
else
++ovflow;
nc = 0;
} else if (state == OUT) {
state = IN;
nc = 1; // beginning of a new word
} else
++nc; // inside a new word
}
}
我遇到的问题是在
while
声明中。
在三个
if
语句下方,有一个 else
。
Xcode 向我发出错误警告,其中显示“添加显式大括号以避免其他内容悬空”。
这是什么意思?
我想出的唯一解决方案是在
++ovflow;
周围放置大括号,但这并没有使错误警告消失。
如有任何帮助,我们将不胜感激!
警告告诉您要这样写
if
声明:
if (condition1) {
statement1;
statement2;
} else if (condition2) {
statement1;
statement2;
} else {
statement1;
}
而不是:
if (condition1) {
statement1;
statement2;
} else if (condition2) {
statement1;
statement2;
} else
statement1;
如果您开始尝试在不添加大括号的情况下向
else
子句添加其他语句,这可以避免错误。