关于练习 1-13 的问题,来自 K&R 第二版 [重复]

问题描述 投票:0回答:1

在本练习中,您将编写一个程序来打印输入中单词长度的直方图。

以下代码来自《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;
周围放置大括号,但这并没有使错误警告消失。

如有任何帮助,我们将不胜感激!

c explicit braces dangling-else
1个回答
0
投票

警告告诉您要这样写

if
声明:

if (condition1) {
    statement1;
    statement2;
} else if (condition2) {
    statement1;
    statement2;
} else {
    statement1;
}

而不是:

if (condition1) {
    statement1;
    statement2;
} else if (condition2) {
    statement1;
    statement2;
} else
    statement1;

如果您开始尝试在不添加大括号的情况下向

else
子句添加其他语句,这可以避免错误。

© www.soinside.com 2019 - 2024. All rights reserved.